0

複雑なレイアウトに基づいてボトムシートダイアログを作成しようとしています。 私が達成しなければならないのは、ヘッダーレイアウトを持つダイアログ、要素のリストを持つリサイクラービュー、いくつかのボタンを持つボトムバーです。ここ は私のコードです:制約レイアウト内のリサイクラビューの問題

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <!-- Layout injected inside this linear layout container programmatically --> 
     <LinearLayout 
      android:id="@+id/header_dialog_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      app:layout_constraintBottom_toTopOf="@id/form_dialog_recycler_view" 
      app:layout_constraintTop_toTopOf="parent" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/form_dialog_recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:scrollbars="vertical" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      app:layout_constraintBottom_toTopOf="@id/bottom_sheet_container_buttons" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toBottomOf="@id/header_dialog_container" /> 

     <LinearLayout 
      android:id="@+id/bottom_sheet_container_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:orientation="horizontal" 
      app:layout_constraintBottom_toBottomOf="parent"> 

      <Button 
       android:id="@+id/dialog_sheet_button_reset" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_reset" 
       android:textColor="@color/dangerColor" /> 

      <Button 
       android:id="@+id/dialog_sheet_button_close" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_close" /> 

     </LinearLayout> 
    </android.support.constraint.ConstraintLayout> 
</layout> 

残念ながら私のリサイクルビューの高さは常にゼロに等しいです。私はandroid:layout_height="0dp"android:layout_height="wrap_content"に変更しようとしましたが、期待通りに下の容器の下になります。何か不足していますか?

答えて

1

このコードを試してみてください。

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <!-- Layout injected inside this linear layout container programmatically --> 
     <LinearLayout 
      android:id="@+id/header_dialog_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      app:layout_constraintBottom_toTopOf="@id/form_dialog_recycler_view" 
      app:layout_constraintTop_toTopOf="parent" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/form_dialog_recycler_view" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:scrollbars="vertical" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      app:layout_constraintBottom_toTopOf="@id/bottom_sheet_container_buttons" 
      app:layout_constraintEnd_toEndOf="parent" 
      app:layout_constraintStart_toStartOf="parent" 
      app:layout_constraintTop_toBottomOf="@id/header_dialog_container" /> 

     <LinearLayout 
      android:id="@+id/bottom_sheet_container_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:orientation="horizontal" 
      app:layout_constraintBottom_toBottomOf="parent"> 

      <Button 
       android:id="@+id/dialog_sheet_button_reset" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_reset" 
       android:textColor="@color/dangerColor" /> 

      <Button 
       android:id="@+id/dialog_sheet_button_close" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_close" /> 

     </LinearLayout> 
    </android.support.constraint.ConstraintLayout> 
</layout> 
+0

ありがとうございました。残念ながら、それは動作しませんでした。 –

0

TLDR:match_parentする変更制約レイアウトの高さ、あなたのrecyclerViewながら

あなたの制約のレイアウトは、

 android:layout_height="wrap_content" 

を持って固定された高さに底面シートの親を変更は

 android:layout_height="0dp" 

(一致する制約に対応)、これにより、recyclerViewはできるだけ小さなスペース(つまり、制約がラップとして設定されている)を占有します。

 android:layout_height="wrap_content" 

としているので、制約レイアウトの高さをmatch_parentに設定しても違いはありません。ここで行うには

事はあなたのボトムシートを作るある

 android:layout_height="@dimen/the_dimension_you_set" 

固定の高さを持っている、これは*可能な限りにできるだけ少ないからrecyclerView上の制約を変更します。高さが小さすぎると、同じ結果になります。ボトムシートの高さの例については、材料設計のガイドラインを参照することをお勧めします。

*なるべく簡略化してください。実際には、0dpは常に「できるだけ多く」を意味しますが、wrap_contentの親のレイアウトをできるだけ少なくするという意味で、可能な限り小さな部屋を取ることを意味します。0の「可能な限り」は0です。

これは、ので、私はTLDRを入れました

+0

ありがとうございます。レイアウトの複雑さのために、モーダルダイアログの固定高さを設定することはできません。だから私は別の解決策で終わった。上記の私の答えを参照してください。 –

+0

あなたがうまくいくものを見つけたらうれしいです。 –

0

私は別の解決策に終わった。リニアレイアウトで制約レイアウトを変更しました。私は底辺マージンを設定しました。

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:id="@+id/header_dialog_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" /> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/form_dialog_recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="60dp" 
      android:scrollbars="vertical" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

     <LinearLayout 
      android:id="@+id/bottom_sheet_container_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:layout_marginTop="-60dp" 
      android:orientation="horizontal"> 

      <Button 
       android:id="@+id/dialog_sheet_button_reset" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_reset" 
       android:textColor="@color/dangerColor" /> 

      <Button 
       android:id="@+id/dialog_sheet_button_close" 
       style="@style/ActionSheetTitle" 
       android:layout_width="0dp" 
       android:layout_height="60dp" 
       android:layout_weight="0.5" 
       android:background="@color/bottomBarContainerColor" 
       android:text="@string/general_close" /> 

     </LinearLayout> 
    </LinearLayout> 
</layout> 
関連する問題