私はこのレイアウトを持っています:
<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が画面の下部に配置されることが望ましい効果があります。
この問題は、recyclerviewに多くのビューホルダーがある場合に発生します。地図を表示するために、上部にスペースを残したいと思います(200dpマージン)。私は多くの方法を試しましたが、エレガントな解決策を見つけることができないようです。基本的に私が欲しいのは、そのコンテンツが大きくなりすぎるまで、recyclerviewがwrap_contentを実行することです。コンテンツが大きすぎる場合は、上部に200dpを残したまま、recyclerviewを拡張して可能なスペースを埋めてください。 iOSでは、これは200以上の制約を使用して可能になります。これはAndroidで可能ですか?どうやって?
ああ!上部に垂直拘束を追加するのを忘れました。 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" />
問題はレイアウトの階層にあると思います。
RecyclerViewをAndroid.R.id.contentに追加すると、それがConstraintLayoutの同じレベルに追加されます。おそらく、RecyclerViewを直接ConstraintLayoutに追加していくつかの制約を適用すると、目的を達成できます。
ただし、 BottomSheetBehavior 模倣したいコンポーネントである可能性がありますか?