Android自定义对话框高度

时间:2010-12-01 14:57:54

标签: android dialog

我正在学习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 个答案:

答案 0 :(得分:7)

TextView的高度为fill_parent。是否有可能将此相对于RelativeLayout的高度与wrap_content一起将其高度推到最大尺寸?如果将TextView高度更改为wrap_content会发生什么?

要添加,the Android SDK表示RelativeLayout的子项不能依赖布局,例如align_parent_bottom。我假设fill_parent是一个依赖项,因此打破了布局。

答案 1 :(得分:1)

嗯,这很奇怪。我使用<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>

它包含了我的内容。

答案 2 :(得分:1)

过去两天我一直在研究同样的问题。最终它在我的对话框风格中使用了一些属性。

这是我正在使用的风格:

<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说,将Frames放在对话框周围 第二个是取出为对话标题保留的空间。

使用这种风格和以下布局我终于有了它的工作:

<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 attriubute设置为true和更早的平台然后3.0我无法找到一种方法使对话框能够填满屏幕,即使{ {1}}被设置为layout_width

希望这会帮助某人......并为我糟糕的英语而烦恼