在v26中不推荐使用PercentRelativeLayout

Ame*_*eer 5 android android-layout android-support-library android-constraintlayout

我想显示一个有6个视图的布局,我按宽度和高度百分比设置.但PercentageLayout在Android v26中已弃用.有什么替代方案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%"
Run Code Online (Sandbox Code Playgroud)

Eug*_*sov 7

有两种方法可以实现您的布局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>
Run Code Online (Sandbox Code Playgroud)

#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>
Run Code Online (Sandbox Code Playgroud)

上面显示的两个示例都会导致以下结果:

结果视图

了解更多: