我冒着写重复问题的风险,但在研究 another SO question 的答案时,我意识到我找不到一个简单的问题和答案,其中包括设置 LinearLayout
的 gravity 和 layout_gravity。此外,在谈论 ViewGroup
而不仅仅是 View 时,我对它们之间的区别感到困惑。我在下面回答我的问题。
以下是我查看的其他一些问题:
- How to set gravity to layout programmatically?
- Set gravity for LinearLayout programmatically
- android - setting LayoutParams programmatically
- LayoutParams gravity not working
- layout_gravity in LinearLayout
- Problem with setLayoutParams method in android UI
- how to set setLayoutParams for linear layout elements
- Is it possible to change the layout width and height in Android at run time?
最佳答案
简答
设置重力
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
(棕色)。 LinearLayout
的 gravity
设置为 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>
以编程方式改变事物
以下代码展示了如何更改 LinearLayout
的 gravity
和 layout_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);
}
}
结果如下:
另见
关于android - 如何以编程方式设置 LinearLayout 的重力和布局重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086486/