web-dev-qa-db-ja.com

ConstraintLayout:RecyclerViewの比率に合わせて画像を拡大縮小できません

  • StaggeredGridLayoutManagerのリサイクラービューがあります。
  • 内にカスタムアイテム/ビューがあります。
  • 各アイテムはConstraintLayoutとして定義され、一定のアスペクト比を持つはずの画像があります。
  • ただし、画像は各スパンの幅に合わせて拡大縮小することができます。
  • そして、比率に応じて高さを調整する必要があります。

しかし、どういうわけか、画像はアスペクト比を維持していません。

リサイクラビューを作成するためのxmlファイルとコードは次のとおりです。

item.xml

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


    <ImageView
        Android:id="@+id/image"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:adjustViewBounds="true"
        Android:scaleType="centerCrop"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintDimensionRatio="16:9"
        tools:src="@drawable/ic_logo" />


    <TextView
        Android:id="@+id/title"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="@+id/image"
        Android:textColor="@color/white"
        tools:text="SAMPLE"
        Android:paddingBottom="10dp"
        Android:layout_margin="5dp"/>

</Android.support.constraint.ConstraintLayout>

activity.xml

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_margin="10dp">

    <Android.support.v7.widget.RecyclerView
        Android:id="@+id/recycler_view"
        Android:layout_marginTop="5dp"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_alignParentStart="true" />

</RelativeLayout>

ビュー全体を生成するコード:

adapter = new SampleAdapter(list);
        StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
        sampleRecyclerView.setLayoutManager(manager);
        sampleRecyclerView.setAdapter(adapter);

各アイテムの幅は細かく設定され、各列スパンの幅に適合します。しかし、高さは維持されず、非常に小さいです。

誰か助けてくれませんか?

ありがとう

10
Sunny

画像では、他の寸法が比率を満たすように調整されているときに、制約と一致する寸法を指定できます。 寸法拘束 については、ドキュメントの「比率」というセクションを参照してください。

両方のディメンションがMATCH_CONSTRAINT(0dp)に設定されている場合は、比率を使用することもできます。この場合、システムは最大の寸法を設定し、すべての制約を満たし、指定されたアスペクト比を維持します。別の側面に基づいて特定の側面を拘束する。幅または高さをそれぞれ制約するために、WまたはHを事前に追加できます。たとえば、1つの寸法が2つのターゲットによって制約されている場合(たとえば、幅が0dpで親を中心とする)、次のように追加することで、制約する側を指定できます。カンマで区切られた、比率の前の文字W(幅を制限する場合)またはH(高さを制限する場合):

     <Button Android:layout_width="0dp"
               Android:layout_height="0dp"
               app:layout_constraintDimensionRatio="H,16:9"
               app:layout_constraintBottom_toBottomOf="parent"
               app:layout_constraintTop_toTopOf="parent"/>

だから、あなたの場合は、app:layout_constraintDimensionRatio="H,16:9"を試してみます。

また、Android:scaleType="centerCrop"adjustViewBoundsは必要ないと思いますが、実際に試してみる必要があります。

11
Cheticamp