如何以编程方式设置LinearLayout的重力和布局重力

我冒着写一个重复的问题的风险,但当我正在研究另一个SO问题的答案时,我意识到我找不到一个简单的问题和答案,包括设置LinearLayout gravity和layout_gravity。 另外,在讨论ViewGroup而不仅仅是一个视图时,我对它们之间的区别感到困惑。 我正在回答我的问题。

以下是我查看的其他一些问题:

  • 如何以编程方式将重力设置为布局?
  • 以编程方式为LinearLayout设置重力
  • android - 以编程方式设置LayoutParams
  • LayoutParams重力不起作用
  • LinearLayout中的layout_gravity
  • Android UI中setLayoutParams方法的问题
  • 如何为线性布局元素设置setLayoutParams
  • 运行时是否可以在Android中更改布局宽度和高度?

  • 简短的回答

    设置重力

    linearLayout.setGravity(Gravity.CENTER);
    

    设置布局重力

    // the LinearLayout's parent is a FrameLayout      
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(400, 400);
    params.gravity = Gravity.TOP|Gravity.RIGHT;
    linearLayout.setLayoutParams(params);
    

    背景

    以前,我已经解释了布局中视图的'gravity'和'layout_gravity'之间的区别。

    设置LinearLayout本身的gravity本身会改变其中视图的位置。 设置LinearLayout的layout_gravity会改变LinearLayout在其父布局中的排列方式。

    此图像在FrameLayout (白色)内显示LinearLayout (棕色)。 LinearLayoutgravity被设置为center_horizontal并且其layout_gravity被设置在right|bottom

    在这里输入图像描述

    这里是xml:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <LinearLayout
            android:id="@+id/llExample"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:layout_gravity="right|bottom"
            android:background="#e3e2ad"
            android:gravity="center_horizontal"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="100dp"
                android:layout_height="50dp"
                android:background="#bcf5b1"
                android:text="TextView 1" />
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="100dp"
                android:layout_height="50dp"
                android:background="#aacaff"
                android:text="TextView 2" />
    
        </LinearLayout>
    
    </FrameLayout>
    

    以编程方式更改事物

    以下代码显示如何更改LinearLayoutgravitylayout_gravity

    public class LinearLayoutGravity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.linear_layout_gravity);
    
            // Change the gravity (not layout_gravity) of the LinearLayout
            LinearLayout ll = (LinearLayout) findViewById(R.id.llExample);
            ll.setGravity(Gravity.CENTER);
    
            // Change the layout_gravity (not gravity) of the LinearLayout      
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(400, 400);
            params.gravity = Gravity.TOP|Gravity.RIGHT;
            ll.setLayoutParams(params);
        }
    }
    

    结果如下:

    在这里输入图像描述

    也可以看看

  • RelativeLayoutLinearLayout与重力:有什么影响?
  • 链接地址: http://www.djcxy.com/p/16657.html

    上一篇: How to set both gravity and layout gravity of a LinearLayout programatically

    下一篇: Android LinearLayout View item in xml does not fill empty space