无法将ImageView置于适当的约束范围内

时间:2019-12-18 18:22:40

标签: android android-constraintlayout

我有一个简单的ImageView,我想在ConstraintLayout中的ImageView的底部边缘居中。我知道它应该工作(基于StackOverflow上发布的其他问题),并且我在不同的视图上执行相同的操作,在此我将ImageView放在View的起始边缘上。有人看到这种情况不起作用的情况吗?我已经重建并重新启动,并且在没有帮助的情况下清除了Android Studio的缓存。

非常简单的布局:

<androidx.constraintlayout.widget.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">

    <ImageView
        android:id="@+id/header_image"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitXY"
        android:src="@drawable/placeholder_header"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_percent="0.2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"


        />

    <ImageView
        android:id="@+id/artist_image"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitXY"
        android:src="@drawable/level_artist_image_placeholder"
        app:layout_constraintBottom_toBottomOf="@id/header_image"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintEnd_toEndOf="@id/header_image"
        app:layout_constraintStart_toStartOf="@id/header_image"
        app:layout_constraintTop_toBottomOf="@id/header_image"
        app:layout_constraintWidth_percent="0.32"

        />

</androidx.constraintlayout.widget.ConstraintLayout>

导致: enter image description here

代替:

enter image description here

3 个答案:

答案 0 :(得分:0)

将artist_image的宽度和高度更改为wrap_content,它对我有用,您还可以在dp中设置高度和宽度,并且仍然可以使用

<androidx.constraintlayout.widget.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">

    <ImageView
        android:id="@+id/header_image"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher_foreground"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_percent="0.2"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"


        />

    <ImageView
        android:id="@+id/artist_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher_background"
        app:layout_constraintBottom_toBottomOf="@+id/header_image"
        app:layout_constraintEnd_toEndOf="@id/header_image"
        app:layout_constraintStart_toStartOf="@id/header_image"
        app:layout_constraintTop_toBottomOf="@id/header_image"
         />

</androidx.constraintlayout.widget.ConstraintLayout>

答案 1 :(得分:0)

我已将您的xmldrawable除外)复制粘贴到Android Studio中,并且像您提到的那样工作正常。

  

当前ConstraintLayout的依赖项:   androidx.constraintlayout:constraintlayout:1.1.3

Example

答案 2 :(得分:0)

尽管有所有这些答案,但我怀疑是否可以使用标准方法实现您想要的结果,但是可以像这样进行一些近似:

    <androidx.constraintlayout.widget.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">

        <ImageView
            android:id="@+id/header_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:src="#ff0000"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHeight_percent="0.2"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.1" />

        <ImageView
            android:id="@+id/artist_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:src="#00ff00"
            app:layout_constraintDimensionRatio="1:1"
            app:layout_constraintEnd_toEndOf="@id/header_image"
            app:layout_constraintStart_toStartOf="@id/header_image"
            app:layout_constraintTop_toBottomOf="@id/guide"
            app:layout_constraintWidth_percent="0.32" />

    </androidx.constraintlayout.widget.ConstraintLayout>

结果:

enter image description here

一个更新:从理论上(未进行测试),您应该实际上可以执行类似的操作。 Ti应该为像素提供完美的布局,而不依赖任何绝对值btw:

<androidx.constraintlayout.widget.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">

        <ImageView
            android:id="@+id/header_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:src="#ff0000"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHeight_percent="0.2"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <View
            android:id="@+id/stub"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:visibility="invisible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHeight_percent="0.4"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ImageView
            android:id="@+id/artist_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            android:src="#00ff00"
            app:layout_constraintCircle="@+id/stub"
            app:layout_constraintDimensionRatio="1:1"
            app:layout_constraintEnd_toEndOf="@id/header_image"
            app:layout_constraintStart_toStartOf="@id/header_image"
            app:layout_constraintTop_toBottomOf="@id/header_image"
            app:layout_constraintWidth_percent="0.32" />

    </androidx.constraintlayout.widget.ConstraintLayout>