Android LinearLayout不对称居中

时间:2018-10-17 04:26:02

标签: android android-linearlayout

在下面的布局中,如何确定blue_view在屏幕上水平居中(即其左边缘和右边缘与red_view完全对齐)?

我知道可以使用ConstraintLayoutRelativeLayout来做到这一点。我很好奇是否有一种方法可以使用LinearLayout来完成此任务。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <View
            android:id="@+id/blue_view"
            android:layout_width="200dp"
            android:layout_height="50dp"
            android:background="@color/blue"
            android:layout_marginEnd="20dp"/>

        <View
            android:id="@+id/green_view"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@color/green"/>

    </LinearLayout>

    <View
        android:id="@+id/red_view"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:background="@color/red"
        android:layout_marginTop="20dp"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

当前布局的图像

enter image description here

所需的布局

enter image description here

2 个答案:

答案 0 :(得分:2)

看看这个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="35dp"
        android:orientation="horizontal">

        <View
            android:id="@+id/blue_view"
            android:layout_width="200dp"
            android:layout_height="50dp"
            android:layout_gravity="center_horizontal"
            android:background="@color/blue"
            android:layout_marginRight="20dp"/>

        <View
            android:id="@+id/green_view"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="@color/green"/>

    </LinearLayout>

    <View
        android:id="@+id/red_view"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:background="@color/red"
        android:layout_marginTop="20dp"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

输出:-enter image description here

这可能是解决您的问题。...

这是所有关于添加android:layout_marginLeft="35dp"的原因,因为您将marginRight="20dp"赋予了一个childView,而另一个childView占据了50dp的中心大小。

答案 1 :(得分:0)

这里是填充的另一种方式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:paddingLeft="70dp">

    <View
        android:id="@+id/blue_view"
        android:layout_width="200dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"
        android:background="@color/colorBlack" />

    <View
        android:id="@+id/green_view"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="20dp"
        android:background="@color/colorRed" />
    </LinearLayout>

  <View
    android:id="@+id/red_view"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:background="@color/colorGreen" />


 </LinearLayout>

在底部视图中添加额外的空间,在本例中为20边距,第二视图为50,因此总计70

输出:

enter image description here

此外,我认为没有LinearLayout无需硬编码就可以实现的方法