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

标签 android android-linearlayout gravity layout-gravity

我冒着写重复问题的风险,但在研究 another SO question 的答案时,我意识到我找不到一个简单的问题和答案,其中包括设置 LinearLayout 的 gravity 和 layout_gravity。此外,在谈论 ViewGroup 而不仅仅是 View 时,我对它们之间的区别感到困惑。我在下面回答我的问题。

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

最佳答案

简答

设置重力

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);

背景

之前,I have explained布局中 View 的“gravity”和“layout_gravity”之间的区别。

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

此图像显示了 FrameLayout(白色)内的 LinearLayout(棕色)。 LinearLayoutgravity 设置为 center_horizo​​ntal 并且其 layout_gravity 设置为 right|bottom.

enter image description here

这是 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);
    }
}

结果如下:

enter image description here

另见

关于android - 如何以编程方式设置 LinearLayout 的重力和布局重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086486/

相关文章:

android - 如何将两个或多个listview放在同一个布局上?

android - 改变 PopupWindow 的引力

Android EditText 右对齐无法正常工作

android 应用索引 api 描述字段

android - 附加了 ORMlite 的 Javadoc,但 Eclipse 找不到

Android LinearLayout getChildAt(索引)

android - 尝试检索 LinearLayout 时出现奇怪的 NullpointerException

android:gravity ="top"没有将 subview 对齐到顶部,但 "center"对齐到中心?

java - 如何从android库类中调用方法

android - 在 Android 设备上运行时卡在 Meteor 示例 “todos” 加载屏幕上