如何在约束布局中垂直对齐和居中对象?垂直或水平对齐是可能的,但除了约束两条网格线之间的视图外,我还没有找到同时居中的方法。
垂直居中对齐:
看起来居中是约束布局的一个巨大问题,这迫使我回到“centerInParent”、“centerVertical”和“centerHorizontal”的相对布局。
我想使用约束布局创建红色框中的布局:
不幸的是,我发现不使用两个网格线的唯一方法是使用嵌套的Relative和LinearLayouts(约束布局应该解决这个问题!)
使用相对和线性布局进行布局:
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@id/user_points"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent">
<LinearLayout
android:id="@+id/stat_1_layout"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/divider_1"
android:orientation="vertical">
<TextView
android:id="@+id/stat_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="10"
android:textSize="16dp"
android:textColor="@color/textSecondaryDark"
android:maxLines="1"/>
<TextView
android:id="@+id/stat_detail_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Streak"
android:textSize="8sp"
android:textColor="@color/textSecondary"
android:maxLines="1"/>
</LinearLayout>
<View
android:id="@+id/divider_1"
android:layout_width="1dp"
android:layout_height="38dp"
android:layout_toLeftOf="@+id/stat_2_layout"
android:background="@drawable/linedivider"/>
<LinearLayout
android:id="@+id/stat_2_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginRight="18dp"
android:layout_centerInParent="true"
android:orientation="vertical">
<TextView
android:id="@+id/stat_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="243"
android:textSize="16dp"
android:textColor="@color/textSecondaryDark"
android:maxLines="1"/>
<TextView
android:id="@+id/stat_detail_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Calories Burned"
android:textSize="8sp"
android:textColor="@color/textSecondary"
android:maxLines="1"/>
</LinearLayout>
<View
android:id="@+id/divider_2"
android:layout_width="1dp"
android:layout_height="38dp"
android:layout_toRightOf="@+id/stat_2_layout"
android:background="@drawable/linedivider"/>
<LinearLayout
android:id="@+id/stat_3_layout"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_toRightOf="@+id/divider_2"
android:layout_centerVertical="true"
android:orientation="vertical">
<TextView
android:id="@+id/stat_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:text="3200"
android:textSize="16dp"
android:textColor="@color/textSecondaryDark"
android:maxLines="1"/>
<TextView
android:id="@+id/stat_detail_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="Steps"
android:textSize="8sp"
android:textColor="@color/textSecondary"
android:maxLines="1"/>
</LinearLayout>
</RelativeLayout>
8条答案
按热度按时间2q5ifsrm1#
可以将居中对齐的视图设置为其他视图的锚。在下面的示例中,“@+id/stat_2”在父视图中水平居中,它用作此布局中其他视图的锚点。
下面是它如何在最小的智能手机(3.7 480 x800 Nexus One)与最大的智能手机(5.5 1440 x2560像素XL)
fcipmucu2#
如果
ConstraintLayout
有一定的大小,子View
有较小的大小,可以通过将子的两条边约束到父的两条相同的边来实现居中。或
由于视图较小,这些约束是不可能的,但是
ConstraintLayout
会尽其所能,每个约束都会同等地"拉"子视图,从而使其居中。此概念适用于任何目标视图,而不仅仅是父视图。
更新
下面的XML实现了您想要的UI,没有视图嵌套,也没有
Guideline
(尽管指导方针本身并不邪恶)。njthzxwz3#
也许我没有完全理解这个问题,但是,在ConstraintLayout中居中所有视图似乎非常简单。这是我使用的:
最后两句台词成功了!
qyuhtwio4#
bjg7j2ky5#
你可以通过创建一个链来轻松地将多个东西居中。它可以垂直和水平工作
链接到有关链的官方文档
编辑以回答注解:
你有一个水平链:
first_score <=> second_score <=> third_score
.second_score
垂直居中,其他分数以此垂直居中。您可以创建一个垂直链
first_score <=> subtitle
,并根据second_score
将其居中wgeznvg76#
我也有一个类似的要求。我想在屏幕的中心有一个容器,在容器里面有很多视图。下面是xml布局代码。这里我使用嵌套的约束布局在屏幕的中心创建容器。
以下是布局
的屏幕截图
另一种解决方案是删除嵌套的约束布局,并在布局中心的顶部元素添加constraint_vertical_bias = 0.5属性,我认为这被称为视图链接。
下面是布局
的屏幕截图
2lpgd9687#
用图形显示出来。
通过将两边都约束到父对象来实现在父对象上居中。您可以将其他对象约束到居中对象之外。
注意:每个箭头代表一个“app:layout_constraintXXX_toYYY=”属性。(图中为6)
bzzcjhmw8#
如果要垂直对齐ConstraintLayout中的Item,则只需添加两个属性
这将在布局内垂直对齐视图,但如果要在ConstraintLayout的中心显示项目,则需要再添加两个属性
这将在ConstraintLayout中对齐项目中心。