【问题标题】:Horizontal LinearLayout inside vertical LinearLayout with code带有代码的垂直LinearLayout内的Horizo​​ntal LinearLayout
【发布时间】:2016-05-23 16:04:03
【问题描述】:

我正在尝试将水平 LinearLayout(带代码)放入垂直 LinearLayout(实际上位于 xml 文件中)。好吧,当我这样做时,它似乎不会创建水平线性,我发布我的代码和图像:

我的相机活动

    package com.example.android.navigationdrawer;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Surface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MyCameraActivity extends AppCompatActivity {


    private static final int CAMERA_REQUEST = 1888;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_my_camera);
        ImageView photoButton = (ImageView) this.findViewById(R.id.button1);


        //OnClick camera button
        photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, CAMERA_REQUEST);
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {

            //Cast LinearLayout of .xml
            LinearLayout CamaraLayout = (LinearLayout) findViewById(R.id.CameraLayout);

            //Get rotation
            int rotation =  getWindowManager().getDefaultDisplay().getRotation();

            //Number of photos

            int PhotoNumber = 0;

            //CREATE LINEAR LAYOUT
            LinearLayout LL = new LinearLayout(this);
            LL.setOrientation(LinearLayout.HORIZONTAL);
            LinearLayout.LayoutParams LLParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            LL.setLayoutParams(LLParams);


            int angle = 0;
            switch (rotation) {
                case Surface.ROTATION_90:
                    angle = -90;

                    PhotoNumber = PhotoNumber+1;

                    if (PhotoNumber == 6) {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(0, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        LL.addView(imageView);

                        //Add the Linear Layout  to "CamaraLayout"
                        CamaraLayout.addView(LL);

                    } else {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(7, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        CamaraLayout.addView(imageView);
                    }
                    break;


                case Surface.ROTATION_180:
                    angle = 180;

                    PhotoNumber = PhotoNumber+1;

                    if (PhotoNumber == 4) {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(0, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        LL.addView(imageView);

                        //Add the Linear Layout  to "CamaraLayout"
                        CamaraLayout.addView(LL);

                    } else {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(7, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        CamaraLayout.addView(imageView);
                    }
                    break;




                case Surface.ROTATION_270:
                    angle = 90;

                    PhotoNumber = PhotoNumber+1;

                    if (PhotoNumber == 6) {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(0, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        LL.addView(imageView);

                        //Add the Linear Layout  to "CamaraLayout"
                        CamaraLayout.addView(LL);

                    } else {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(7, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        CamaraLayout.addView(imageView);
                    }
                    break;

                default:
                    angle = 0;
                    PhotoNumber = PhotoNumber+1;

                    if (PhotoNumber == 4) {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(0, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        LL.addView(imageView);

                        //Add the Linear Layout  to "CamaraLayout"
                        CamaraLayout.addView(LL);

                    } else {

                        //Set LinearLayout params
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                        lp.setMargins(7, 5, 7, 5);


                        //Create imageView to put Bitmap
                        ImageView imageView = new ImageView(this);

                        //Put LayoutParams
                        imageView.setLayoutParams(lp);

                        //Adding the Bitmap
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        imageView.setImageBitmap(photo);


                        //Add image to Linear Layout
                        CamaraLayout.addView(imageView);
                    }
                    break;
            }











        }
    }

}

我不发布 .xml,因为它只是一个 LinearLayout 和一个 ImageView。

What it does

我希望图像彼此相邻显示。

你们中的一些人可能已经想到了直接制作水平 LinearLayout 的想法,这很有效,但我正在开发一个可以放置不同“线条”照片的程序。

有什么想法吗?谢谢!

【问题讨论】:

    标签: android


    【解决方案1】:

    我不确定您的代码是否在循环中。根据我的猜测。您的代码在一个循环内,并且您在垂直布局上添加了 1 张图像 1 x 1 的整个水平布局。您应该首先通过在其上添加所有图像来构建水平布局,然后最终将其添加到垂直布局中。话虽如此。使用您的代码。您可以将其更改为:

    LinearLayout CamaraLayout = (LinearLayout) findViewById(R.id.CameraLayout);
    
    //CREATE LINEAR LAYOUT
    LinearLayout LL = new LinearLayout(this);
    LL.setOrientation(LinearLayout.HORIZONTAL);
    LinearLayout.LayoutParams LLParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    LL.setLayoutParams(LLParams);
    
    foreach()//or some loop
    {
        //Number of photos
        int PhotoNumber = 0;
    
        //Set LinearLayout params
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(0, 5, 7, 5);
    
    
        //Create imageView to put Bitmap
        ImageView imageView = new ImageView(this);
    
        //Put LayoutParams
        imageView.setLayoutParams(lp);
    
        //Adding the Bitmap
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        imageView.setImageBitmap(photo);
    
    
        //Add image to Linear Layout
        LL.addView(imageView);
    }
    //Add the Linear Layout  to "CamaraLayout"
    CamaraLayout.addView(LL);
    

    【讨论】:

    • 仍然有错误。使用完整活动代码编辑的问题
    • 请展示你真正想要完成的事情。因为在您的代码中,您只在布局上添加了 1 个视图。所以实际上如果你想让图像水平显示,你只需要一个水平布局,将它的高度和宽度设置为“match_parent”,并让它在你添加更多视图时自动调整。
    • 我没有报错,只是不知道怎么做我想做的事;简单的画廊。我的想法是:垂直线性布局,其中包括水平线性布局,其中包含尽可能多的照片。当它不能有更多照片时,它会创建另一个包含照片等的水平线性布局...@ljpv14
    • 那么唯一的解决方案就是将您的最外层布局设置为水平线性布局并为其添加视图。将其宽度和高度设置为 match_parent。
    • 是的,试过了,但我只能拍几张照片,我想插入无限数量的照片@ljpv14 有什么建议吗?我考虑过将第一个线性设置为水平,当它满了,再创建一个。但它会设置在最后一张图片旁边,所以不值得
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多