2016-05-15 3 views
0

Я пытаюсь установить простой диалог, но я не могу контролировать высоту. Это всегда максимальная высота экрана. Есть ли способ заставить его правильно обернуть содержимое?Высота диалогового окна Android

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/save" 
     android:id="@+id/buttonSave" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentEnd="true" 
     android:textAlignment="center" 
     style="?attr/borderlessButtonStyle"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@android:string/cancel" 
     android:id="@+id/buttonCancel" 
     android:layout_alignParentBottom="true" 
     android:layout_toStartOf="@+id/buttonSave" 
     style="?attr/borderlessButtonStyle"/> 

</RelativeLayout> 

.

final Dialog dialog = new Dialog(this); 
dialog.setContentView(R.layout.save_dialog); 
dialog.setTitle(R.string.saveAs); 
dialog.show(); 
+0

Постарайся добавить 'dialog.getWindow() setLayout (ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)' перед показом диалога.. Работает для 'DialogFragment'. – Patrick

+2

Царапина: у вас есть 'android: layout_alignParentBottom =" true "' в вашем XML. Это заставляет вашу кнопку располагаться в самом низу доступного для нее пространства, что делает «RelativeLayout» более похожим на layout_height, чем wrap_content. Почему бы просто не использовать 'LinearLayout' с' android: orientation = "horizontal" '? – Patrick

+0

Это одна из немногих вещей, которые я не настраивал, так что это может иметь смысл, но если так: какой ужасный дизайн! Причина, по которой я использую RelativeLayout, заключается в том, что в диалоговом окне будет еще дюжина вещей, и я редко использую 'LinearLayout' для сложных макетов (штрафы с вложенными макетами и т. Д.). Вышесказанное - это то, что я разрезал его минимально до тех пор, пока, наконец, не перейду «WTF!?!?!?», Lol. Я проведу около двух часов и продолжу. – Anthony

ответ

3

У вас есть android:layout_alignParentBottom="true" в вашем XML. Это заставляет ваш Button располагаться в самом низу доступного ему пространства, эффективно делая RelativeLayout, а wrap_content - match_parentlayout_height.

Вместо этого вместо этого следует использовать LinearLayout или GridLayout. Что-то вдоль линий это будет делать трюк:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
    <!-- 
    The rest of your layout can go here 
    with a layout_height of 0dp and a layout_weight of 1 
    if you want your buttons to dock themselves at the bottom of the dialog 
    --> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@android:string/cancel" 
      android:id="@+id/buttonCancel" 
      style="?attr/borderlessButtonStyle"/> 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/save" 
      android:id="@+id/buttonSave" 
      android:textAlignment="center" 
      style="?attr/borderlessButtonStyle"/> 
    </LinearLayout> 
</LinearLayout> 
Смежные вопросы