如何设置最大百分比以dp为单位的宽度?

时间:2019-05-17 10:12:21

标签: android android-layout android-constraintlayout

我有一个ImageView,需要按照屏幕宽度拉伸。但是我不希望这种观点无限期地延伸。我还需要将图像的比例保持为16:9。在ConstraintLayout中使用百分比时,我很难设置最大宽度。我发现可以使用ConstraintLayout来设置比率,但是只要保留比率即可,就不需要使用此布局(请注意,除了Glide之外,我不能使用第三方库)。这就是我现在所拥有的。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/list_item_image"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintDimensionRatio="16:9"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/list_item_title"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.5"
        app:layout_constraintWidth_max="163dp"
        tools:src="@color/white" />

    <TextView
        android:id="@+id/list_item_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/list_item_image"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="Test Title" />

</android.support.constraint.ConstraintLayout>

在没有app:layout_constraintWidth_max的情况下一切正常,但是一旦设置了该属性,百分比将完全停止工作,并且width设置为某​​个任意值(绝对不是我使用的163dp)。但有趣的是,如果最大宽度大于屏幕宽度的一半,则该百分比将再次起作用。似乎这两个属性不能一起使用,但是我不知道该如何定义我需要做的事情。

2 个答案:

答案 0 :(得分:0)

您可以在没有约束布局的情况下执行此操作,您可以使用LinearLayout或RelativeLayout,设置“图像宽度”以匹配父对象并将图像缩放到

enter image description here

有关详细信息的链接: https://thoughtbot.com/blog/android-imageview-scaletype-a-visual-guide

答案 1 :(得分:0)

实际上,似乎将app:layout_constraintWidth_percent="0.5"app:layout_constraintWidth_max组合在一起并不能产生预期的结果。一种解决方法是使用GuidelineImageView约束在所需的百分比上。然后,您可以根据需要将TextView的开头约束为Guideline或将ImageView的结尾约束为

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <android.support.constraint.Guideline
            android:id="@+id/guideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.5" />

    <ImageView
            android:id="@+id/list_item_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintDimensionRatio="16:9"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@id/guideline"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_max="163dp"
            tools:src="@android:color/black" />

    <TextView
            android:id="@+id/list_item_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/list_item_image"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Test Title" />

</android.support.constraint.ConstraintLayout>