在v26中不推荐使用PercentRelativeLayout

时间:2017-12-18 13:07:42

标签: android android-layout android-support-library android-constraintlayout

我想显示一个包含6个视图的布局,我按宽度和高度百分比设置。 但是在Android v26中已弃用PercentageLayout PercentageLayout的替代方案是什么? Android文档说ConstraintLayoutapp:layout_constraintGuide_percent一起使用。 (https://developer.android.com/reference/android/support/percent/PercentRelativeLayout.html) 但对PercentageLayout我们可以使用

 app:layout_heightPercent="33.4%"
    app:layout_widthPercent="45%"

2 个答案:

答案 0 :(得分:6)

使用ConstraintLayout实现布局的方法有两种。

#1指南

考虑到您需要布置六个视图,您需要添加两个垂直指南,其父级宽度的百分比位置 33% 66%。此外,您还需要添加两个水平指南,其中百分比位置 45% 90%的屏幕高度。然后将您的六个视图限制为这些指南,如此屏幕截图所示:

Layout Editor

以下是使用指南进行布局构建的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链重量

链是另一种使用百分比值来调整视图大小的强大方法。您在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>

上面显示的两个例子都会导致这个结果:

Result view

了解更多关于:

答案 1 :(得分:2)

  

PercentageLayout

的替代方案是什么

使用ConstraintLayout,如问题中所示。

使用ConstraintLayout1.0.2)的当前生产版本,在所需的百分比位置设置指南,并将您的小部件约束到指南。

使用即将发布的1.1.x系列(现在为1.1.0-beta4),您可以在将{0}设置为layout_constraintWidth_percent的任意轴上使用layout_constraintHeight_percent0dp (又名MATCH_CONSTRAINT)。