android线性布局,如何居中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android线性布局,如何居中?相关的知识,希望对你有一定的参考价值。

我刚学的,下面是垂直线性布局。
<Button
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="@string/hello" />

<Button
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:text="@string/textview2" />
为什么我的第二个btn不能够垂直且水平居中,为什么这些属性不能够见名知义,这样设置哪里错了?出来的效果只是显示水平居中而以.
垂直居中的效果我能做得出来,也是误打误撞做出来的,只是不知道其它方式为什么实现不了?
这些标签,是不是可以继承自动继承上一个标签的属性?
很多属性看帮助文档设置的都没有显示出效果?
这些属性为什么设置这么不符合我们的思考逻辑?
好痛苦啊。

因为你用的是LinearLayout,它的意思就是线性的布局,比如在垂直方向的LinearLayout中设置水平居中,那没问题,因为在水平方向只有这一个元素,android知道具体的宽度,所以可以把这个元素刚在这个宽度的中央,而你想设置垂直居中,问题来了。因为垂直方向可以不止有一个元素,所以android就会不确定这个布局应该有多高,垂直居中到底应该在哪个位置,所以在垂直的LinearLayout中只有水平居中有用,同样的水平的布局只有垂直居中有用。如果你用相对布局就能设置水平和垂居中。要多些写布局才能明白属性与布局之间的关系。
标签不能继承。
多思考为什么不能起作用,是符合逻辑的
参考技术A 给你个清晰的回答。

首先,标签有两种,一个是布局(各种Layout),一个是控件(Button,TextView之类)。

上下左右中的位置参数,有: android:gravity ,和 android:layout_gravity。
android:gravity ,是指布局容器,对于自己内部控件的布局方向,在Layout标签描述,作用于Layout内的各个控件。(对内有效)
android:Layout_gravity,是控件自己,在布局容器的布局方向,在控件标签描述,只对自己在布局容器位置有效。(对外有效)

继承什么的…… 我还从来没考虑过~
参考技术B 给你个清晰的回答。

首先,标签有两种,一个是布局(各种Layout),一个是控件(Button,TextView之类)。

上下左右中的位置参数,有: android:gravity ,和 android:layout_gravity。
android:gravity ,是指布局容器,对于自己内部控件的布局方向,在Layout标签描述,作用于Layout内的各个控件。(对内有效)
android:Layout_gravity,是控件自己,在布局容器的布局方向,在控件标签描述,只对自己在布局容器位置有效。(对外有效)

继承什么的…… 我还从来没考虑过~本回答被提问者采纳
参考技术C 将两个button的布局放到一个linearlayout或者是framelayout里有别的属性的可以看看,很简单的 参考技术D android:gravity ,和 android:layout_gravity
你在LinearLayout中设置下gravity

在其线性布局垂直父Android中将以编程方式创建的单选按钮居中

我正在以编程方式创建一个线性布局,其中orientation = vertical。在该线性布局中,我还以编程方式创建2个或3个对象:

1图像视图

2文本视图(如果需要,我创建此对象)

3单选按钮

问题是如何将单选按钮置于其父级中心?


编辑:我的代码在Xamarin.Android C#中,但我认为很容易将其转换为Java Android

                    LinearLayout mainLinearLayout = new LinearLayout(this)
                    {
                        Orientation = Orientation.Vertical

                    };


                    LinearLayout sub1LinearLayout = new LinearLayout(this)
                    {
                        //Set orientation = horizontal
                        Orientation = Orientation.Horizontal

                    };

                    //Add the sub1LinearLayout to the mainLinearLayout
                    mainLinearLayout.AddView(sub1LinearLayout);


                    for (int j = 0; j < count; j++)
                    {


                        LinearLayout sub2LinearLayout = new LinearLayout(this)
                        {
                            Orientation = Orientation.Vertical
                        };


                        LinearLayout.LayoutParams layoutParams =
                            new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent,
                                ViewGroup.LayoutParams.WrapContent);



                        RadioButton Box = new RadioButton(this){
                           //Set gravity = center
                              Gravity = GravityFlags.Center
                         };



                            switch (SomeMode)
                            {


                                //Show radio button + image
                                case Mode.ShowBoxAndImage:
                                {

                                    ImageView image = new ImageView(this);


                                    Bitmap imageBitmap = BitmapFactory.DecodeFile(path);


                                    image.SetImageBitmap(imageBitmap);


                                    sub2LinearLayout.AddView(image);


                                    layoutParams.SetMargins(padding, 0, 2 * padding, 0);

                                   break;
                                }
                                //Show radio button + its text + image
                                case Mode.ShowBoxAndImageAndText:
                                {
                                    ImageView image = new ImageView(this);


                                    Bitmap imageBitmap = BitmapFactory.DecodeFile(path);


                                    image.SetImageBitmap(imageBitmap);


                                    sub2LinearLayout.AddView(image);


                                    TextView Name = new TextView(this)
                                    {

                                        Text = name,


                                        TextSize = nameTextSize,

                                        //Set gravity = center
                                        Gravity = GravityFlags.Center
                                    };


                                    Name.SetTextColor(new Color(ContextCompat.GetColor(this, Resource.Color.colorBlack)));

                                    sub2LinearLayout.AddView(Name);


                                    layoutParams.SetMargins(padding, 0, 2 * padding, 0);

                                    break;
                                }

                            }
                    }


                            sub2LinearLayout.AddView(Box);


                            sub2LinearLayout.LayoutParameters = layoutParams;


                            sub1LinearLayout.AddView(sub2LinearLayout);

                            //Set sub2LinearLayout gravity = bottom
                            sub2LinearLayout.SetGravity(GravityFlags.Bottom);

enter image description here

答案

试试这个:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.weight = 1.0f;
params.gravity = Gravity.CENTER;

yourview.setLayoutParams(params);
另一答案

尝试以下代码: -

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    linearLayout.setLayoutParams(params);
    linearLayout.setPadding(15, 15, 15, 15);
    setContentView(linearLayout);

    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.drawable.english);

    TextView textView = new TextView(this);
    textView.setGravity(Gravity.CENTER);
    textView.setText("1");

    RadioButton button = new RadioButton(this);
    button.setGravity(Gravity.CENTER);
    button.setChecked(true);

    linearLayout.addView(imageView);
    linearLayout.addView(textView);
    linearLayout.addView(button);
}

Screenshot

另一答案

我通过为每个视图创建LayoutParams来修复它,并将其视图添加到父线性布局。

LinearLayout.LayoutParams center = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent)
                                    {
                                        Gravity = GravityFlags.Center
                                    };
另一答案

试试这个

在所有子视图中使用布局重力

android:layout_gravity="center"
另一答案

使用

yourLinearLayout.setGravity(Gravity.CENTER);

检查这是否有效。

以上是关于android线性布局,如何居中?的主要内容,如果未能解决你的问题,请参考以下文章

在其线性布局垂直父Android中将以编程方式创建的单选按钮居中

如何在垂直线性布局中垂直居中视图?

Android中如何让控件居中

以这种方式居中布局的好解决方案是啥?(android xml)

Android如何在一个界面里布局4个按钮 分为2行2列 与屏幕上下、水平居中对齐

android 使用Activity类布局时怎样让图片居中