Высота настраиваемого диалогового окна Android - PullRequest
6 голосов
/ 01 декабря 2010

Я изучаю диалоги Android и меня смущает то, что определяет их высоту. Если я использую этот XML для моего диалогового макета. , ,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <Button
     android:id="@+id/AButton"
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:layout_alignParentRight="true"
     android:layout_marginLeft="10px"
     android:text="Click Me to Dismiss"
  /> 
  <TextView android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_toLeftOf="@id/AButton"
    android:text="Click this button: " 
    />
   <ImageView
    android:id="@+id/an_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="42px"
    android:src="@drawable/screw50">
  </ImageView>      
  />

Я получаю этот диалог. , ,

alt text

Но Developer.Android.com говорит, что ...

" WRAP_CONTENT, что означает, что представление хочет быть достаточно большим, чтобы вместить его содержимое (плюс заполнение) "

... так почему же диалог намного выше, чем нужно?

Если я заменю высоту макета на

  android:layout_height="200px"

это делает правильно короткий диалог, но я не хочу использовать явную высоту пикселей (это не очень хорошая практика). Как сделать диалог достаточно большим для его содержимого?

Ответы [ 3 ]

7 голосов
/ 01 декабря 2010

У вас есть высота вашего TextView для fill_parent.Возможно ли, что это в сочетании с высотой RelativeLayout для wrap_content увеличивает его высоту до максимального размера?Что произойдет, если вы измените высоту TextView на wrap_content?

Чтобы добавить, Android SDK говорит, что дочерние элементы RelativeLayout не могут зависеть от Layout, например align_parent_bottom.Я предполагаю, что fill_parent является зависимостью и поэтому нарушает компоновку.

1 голос
/ 26 июля 2011

Я работал над той же проблемой последние 2 дня.Наконец, он работает правильно, используя некоторые атрибуты в стиле моего диалога.

вот стиль, который я использую:

<style name="SearchFieldSetterDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:gravity">bottom</item>
</style>

ключевые атрибуты:

    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>

первый, я полагаю, должен сказать windowManager поместить Рамки вокруг диалогового окна, а второй - чтобы выделить место, зарезервированное для заголовка диалога.

с этим стилем и следующим макетом я наконецесли бы это работало:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

...

</LinearLayout>

Моя проблема с этим решением состоит в том, что с атрибутом android:windowIsFloating, установленным как true и более ранней платформой, чем 3.0, я не могу найти способ заставить диалог заполнитьэкран даже если layout_width установлен как fill_parent

надеюсь, это кому-нибудь поможет ... и простите за мой плохой английский

1 голос
/ 01 декабря 2010

Хм, это странно.Я использую <LinearLayout/>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="vertical"
                  android:background="@android:color/white">
<TextView android:id="@+id/message"
              android:padding="5dp"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_marginBottom="10dp"/>
    ...
    </LinearLayout>

, и это прекрасно окутывает мой контент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...