我冒着写重复问题的风险,但当我研究另一个SO问题的答案时,我意识到我找不到一个简单的问题和答案,包括设置LinearLayout
的 gravity 和 layout_gravity。同时,当谈论 ViewGroup
而非只是一个视图时,我也对它们之间的差异感到困惑。下面是我的答案。
以下是我查看的其他一些问题:
我冒着写重复问题的风险,但当我研究另一个SO问题的答案时,我意识到我找不到一个简单的问题和答案,包括设置LinearLayout
的 gravity 和 layout_gravity。同时,当谈论 ViewGroup
而非只是一个视图时,我也对它们之间的差异感到困惑。下面是我的答案。
以下是我查看的其他一些问题:
设置重力
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
则会改变它在父布局中的排列方式。
下面这张图片展示了一个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);
}
}
这是最终结果:
||
。GRAVITY = Gravity.RIGHT or Gravity.CENTER_VERTICAL
frameContainer.layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
GRAVITY)