PercentRelativeLayout 在 v26 中被弃用
PercentRelativeLayout is deprecated in v26
我想显示一个布局,其中包含 6 个视图,我按宽度和高度百分比进行设置。
但是 PercentageLayout
在 Android v26 中被弃用了
PercentageLayout
的替代方案是什么? Android 文档说要将 ConstraintLayout
与 app:layout_constraintGuide_percent
一起使用。 (https://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html)
但是对于 PercentageLayout
我们可以使用
app:layout_heightPercent="33.4%"
app:layout_widthPercent="45%"
What is the alternative for PercentageLayout
使用 ConstraintLayout
,如您的问题所示。
在 ConstraintLayout
(1.0.2
) 的当前生产版本中,在所需的百分比位置设置一个准则,并将您的小部件约束到该准则。
对于即将推出的 1.1.x
系列(现在是 1.1.0-beta4
),您可以在将大小设置为 [=17] 的任何轴上使用 layout_constraintWidth_percent
和 layout_constraintHeight_percent
=] (a.k.a., MATCH_CONSTRAINT
).
有两种方法可以使用 ConstraintLayout
实现布局。
#1 指南
考虑到您需要布置六个视图,您需要添加两个垂直参考线,父级的百分比位置为 33% 和 66%宽度。并且您还需要添加两个水平参考线,屏幕高度的百分比位置为 45% 和 90%。然后将您的六个视图限制在这些准则中,如屏幕截图所示:
这里是 XML 布局构建指南的源代码:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<View
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<View
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<android.support.constraint.Guideline
android:id="@+id/vertical_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33" />
<android.support.constraint.Guideline
android:id="@+id/vertical_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66" />
<android.support.constraint.Guideline
android:id="@+id/horizontal_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.45" />
<android.support.constraint.Guideline
android:id="@+id/horizontal_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.9" />
</android.support.constraint.ConstraintLayout>
#2 有重量的链条
Chains 是另一种使用百分比值调整视图大小的强大方法。您在 ConstraintLayout 链中使用权重值就像在 LinearLayout 中使用权重一样。
这里的 XML 示例展示了如何使用带权重的链:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_chainStyle="spread"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view2"
app:layout_constraintBottom_toTopOf="@+id/view4" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view1"
app:layout_constraintStart_toEndOf="@+id/view1"
app:layout_constraintEnd_toStartOf="@+id/view3"
app:layout_constraintBottom_toBottomOf="@+id/view1" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view2"
app:layout_constraintStart_toEndOf="@+id/view2"
app:layout_constraintBottom_toBottomOf="@+id/view2"
app:layout_constraintEnd_toEndOf="parent" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toBottomOf="@+id/view1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view5"
app:layout_constraintBottom_toTopOf="@+id/space" />
<View
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view4"
app:layout_constraintStart_toEndOf="@+id/view4"
app:layout_constraintEnd_toStartOf="@+id/view6"
app:layout_constraintBottom_toBottomOf="@+id/view4" />
<View
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view5"
app:layout_constraintStart_toEndOf="@+id/view5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/view5" />
<Space
android:id="@+id/space"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintVertical_weight="10"
app:layout_constraintTop_toBottomOf="@+id/view4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
上面显示的两个例子都导致了这个结果:
阅读更多关于:
我想显示一个布局,其中包含 6 个视图,我按宽度和高度百分比进行设置。
但是 PercentageLayout
在 Android v26 中被弃用了
PercentageLayout
的替代方案是什么? Android 文档说要将 ConstraintLayout
与 app:layout_constraintGuide_percent
一起使用。 (https://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html)
但是对于 PercentageLayout
我们可以使用
app:layout_heightPercent="33.4%"
app:layout_widthPercent="45%"
What is the alternative for PercentageLayout
使用 ConstraintLayout
,如您的问题所示。
在 ConstraintLayout
(1.0.2
) 的当前生产版本中,在所需的百分比位置设置一个准则,并将您的小部件约束到该准则。
对于即将推出的 1.1.x
系列(现在是 1.1.0-beta4
),您可以在将大小设置为 [=17] 的任何轴上使用 layout_constraintWidth_percent
和 layout_constraintHeight_percent
=] (a.k.a., MATCH_CONSTRAINT
).
有两种方法可以使用 ConstraintLayout
实现布局。
#1 指南
考虑到您需要布置六个视图,您需要添加两个垂直参考线,父级的百分比位置为 33% 和 66%宽度。并且您还需要添加两个水平参考线,屏幕高度的百分比位置为 45% 和 90%。然后将您的六个视图限制在这些准则中,如屏幕截图所示:
这里是 XML 布局构建指南的源代码:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<View
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_1"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<View
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintBottom_toTopOf="@+id/horizontal_guideline_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/vertical_guideline_2"
app:layout_constraintTop_toTopOf="@+id/horizontal_guideline_1" />
<android.support.constraint.Guideline
android:id="@+id/vertical_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33" />
<android.support.constraint.Guideline
android:id="@+id/vertical_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66" />
<android.support.constraint.Guideline
android:id="@+id/horizontal_guideline_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.45" />
<android.support.constraint.Guideline
android:id="@+id/horizontal_guideline_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.9" />
</android.support.constraint.ConstraintLayout>
#2 有重量的链条
Chains 是另一种使用百分比值调整视图大小的强大方法。您在 ConstraintLayout 链中使用权重值就像在 LinearLayout 中使用权重一样。
这里的 XML 示例展示了如何使用带权重的链:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view1"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_bright"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_chainStyle="spread"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view2"
app:layout_constraintBottom_toTopOf="@+id/view4" />
<View
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_green_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view1"
app:layout_constraintStart_toEndOf="@+id/view1"
app:layout_constraintEnd_toStartOf="@+id/view3"
app:layout_constraintBottom_toBottomOf="@+id/view1" />
<View
android:id="@+id/view3"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_purple"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view2"
app:layout_constraintStart_toEndOf="@+id/view2"
app:layout_constraintBottom_toBottomOf="@+id/view2"
app:layout_constraintEnd_toEndOf="parent" />
<View
android:id="@+id/view4"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_orange_light"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintVertical_weight="45"
app:layout_constraintTop_toBottomOf="@+id/view1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/view5"
app:layout_constraintBottom_toTopOf="@+id/space" />
<View
android:id="@+id/view5"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_red_light"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view4"
app:layout_constraintStart_toEndOf="@+id/view4"
app:layout_constraintEnd_toStartOf="@+id/view6"
app:layout_constraintBottom_toBottomOf="@+id/view4" />
<View
android:id="@+id/view6"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/holo_blue_dark"
app:layout_constraintHorizontal_weight="33.3"
app:layout_constraintTop_toTopOf="@+id/view5"
app:layout_constraintStart_toEndOf="@+id/view5"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="@+id/view5" />
<Space
android:id="@+id/space"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintVertical_weight="10"
app:layout_constraintTop_toBottomOf="@+id/view4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
上面显示的两个例子都导致了这个结果:
阅读更多关于: