我试图将ImageView置于LinearLayout水平和垂直的中心,但我就是不能这样做。 我没有使用RelativeLayout的主要原因是因为我需要layout_weight(我的Activity由四列组成,应该平均划分,并且也响应不同的屏幕宽度,每一列都有一个ImageView中心和未拉伸)
ImageView
LinearLayout
RelativeLayout
layout_weight
Activity
这是我的xml到目前为止:
android:layout_gravity用于布局本身
android:layout_gravity
为你的LinearLayout的子元素使用android:gravity="center"
android:gravity="center"
所以你的代码应该是:
<LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" >
android:gravity处理子数组的对齐,
android:gravity
android:layout_gravity处理自身的对齐。
所以用其中一个吧。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000" android:baselineAligned="false" android:gravity="center" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Main" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <ImageView android:id="@+id/imageButton_speak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/image_bg" android:src="@drawable/ic_speak" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" > <ImageView android:id="@+id/imageButton_readtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/image_bg" android:src="@drawable/ic_readtext" /> </LinearLayout> ... </LinearLayout>
(除了叶子节点,每个节点都应该有android:gravity="center"。)
或
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#000" android:baselineAligned="false" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Main" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" > <ImageView android:id="@+id/imageButton_speak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/image_bg" android:src="@drawable/ic_speak" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" > <ImageView android:id="@+id/imageButton_readtext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/image_bg" android:src="@drawable/ic_readtext" /> </LinearLayout> ... </LinearLayout>
(除根节点外的每个节点都应该有android:layout_gravity="center"。)
android:layout_gravity="center"
我尝试了这里提到的解决方案,但没有帮助我。我介意的解决方案是layout_width必须使用wrap_content作为值。
layout_width
wrap_content
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_weight="1" >
下面是一些示例代码。这对我很管用。
<LinearLayout android:gravity="center" > <TextView android:layout_gravity="center" /> <Button android:layout_gravity="center" /> </LinearLayout>
所以你正在设计线性布局,把它的所有内容(TextView和按钮)在它的中心,然后TextView和按钮被放置相对于线性布局的中心。
android:gravity可以用在布局中来对齐它的子元素。
android:layout_gravity可以在任何视图上使用,使自己在其父视图中对齐。
注意:如果self或children不是预期的居中,检查width/height是否为match_parent并更改为其他值
match_parent
如果你在java代码中寻找答案,
LinearLayout linearLayout = new LinearLayout(context); linearLayout.setGravity(Gravity.CENTER); // add children