如何居中线性布局中的内容 ?

我试图将ImageView置于LinearLayout水平和垂直的中心,但我就是不能这样做。 我没有使用RelativeLayout的主要原因是因为我需要layout_weight(我的Activity由四列组成,应该平均划分,并且也响应不同的屏幕宽度,每一列都有一个ImageView中心和未拉伸)

这是我的xml到目前为止:































266001 次浏览

android:layout_gravity用于布局本身

为你的LinearLayout的子元素使用android:gravity="center"

所以你的代码应该是:

<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1" >

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"。)

我尝试了这里提到的解决方案,但没有帮助我。我介意的解决方案是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并更改为其他值

如果你在java代码中寻找答案,

LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setGravity(Gravity.CENTER);
// add children