web-dev-qa-db-ja.com

ConstraintLayoutでwrap_contentまたは「使用可能なスペースを埋める」方法

私はこのレイアウトを持っています:

<Android.support.constraint.ConstraintLayout 
Android:layout_width="match_parent"
Android:layout_height="match_parent">
    ... 
    <FrameLayout
    Android:id="@+id/content"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="200dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintBottom_toBottomOf="parent" />
</Android.support.constraint.ConstraintLayout >

このrecyclerviewは、「id/content」フレームレイアウトに追加されます

<Android.support.v7.widget.RecyclerView 
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/white"
Android:layout_gravity="bottom"
Android:layout_marginLeft="8dp"
Android:layout_marginRight="8dp"
app:layoutManager="LinearLayoutManager" />

Recyclerviewが画面の下部に配置されることが望ましい効果があります。

enter image description here

この問題は、recyclerviewに多くのビューホルダーがある場合に発生します。地図を表示するために、上部にスペースを残したいと思います(200dpマージン)。私は多くの方法を試しましたが、エレガントな解決策を見つけることができないようです。基本的に私が欲しいのは、そのコンテンツが大きくなりすぎるまで、recyclerviewがwrap_contentを実行することです。コンテンツが大きすぎる場合は、上部に200dpを残したまま、recyclerviewを拡張して可能なスペースを埋めてください。 iOSでは、これは200以上の制約を使用して可能になります。これはAndroidで可能ですか?どうやって?

5
AtomicBoolean

ああ!上部に垂直拘束を追加するのを忘れました。 FrameLayoutをこれに変更するとうまくいきました。

    <FrameLayout
    Android:id="@+id/content"
    Android:layout_width="match_parent"
    Android:layout_height="0dp"
    Android:layout_marginTop="200dp"
    app:layout_constraintTop_toBottomOf="@id/appBarLayout"
    app:layout_constraintBottom_toBottomOf="parent" />
6
AtomicBoolean

問題はレイアウトの階層にあると思います。

RecyclerViewをAndroid.R.id.contentに追加すると、それがConstraintLayoutの同じレベルに追加されます。おそらく、RecyclerViewを直接ConstraintLayoutに追加していくつかの制約を適用すると、目的を達成できます。

ただし、 BottomSheetBehavior 模倣したいコンポーネントである可能性がありますか?

1
ChristopheCVB