在下面的布局中,如何确定blue_view
在屏幕上水平居中(即其左边缘和右边缘与red_view
完全对齐)?
我知道可以使用ConstraintLayout
和RelativeLayout
来做到这一点。我很好奇是否有一种方法可以使用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>
当前布局的图像:
所需的布局:
答案 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>
这可能是解决您的问题。...
这是所有关于添加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
输出:
此外,我认为没有LinearLayout
无需硬编码就可以实现的方法