如何设置活动的最大高度(Dialog主题)

时间:2012-06-18 23:49:07

标签: android android-layout

我正在针对平板电脑优化我们的Android应用。对于大部分应用程序,我们使用片段,但对于某些设置屏幕,我们只想将屏幕作为平板电脑的对话框启动。为实现这一目标,我们在Manifest中设置了Activity的主题

<activity
    android:name="com.company.app.EditTaxTypeSettingsActivity"
    android:theme="@style/ActivityTheme">
</activity>

这是主题(在res / values-large-v11中):

<?xml version="1.0" encoding="utf-8"?>
<resources>         
    <style name="ActivityTheme" parent="@android:style/Theme.Holo.Light.Dialog">      
    <item name="android:windowIsFloating">true</item>
    </style>
</resources>

使用此主题的活动作为对话框打开,在横向方向上看起来很好。但在纵向模式下,对话框垂直填满屏幕,看起来很傻。

如何设置这些对话框的最大高度?我已经尝试设置主题<item name="android:maxHeight">500dip</item>的maxHeight属性,但它似乎引用了活动内容周围的对话框容器而不是活动内容本身。 (即,如果我将Activity主题的高度设置为500dip,则对话框只会获得一个非常大的对话框标题区域)

我也试过设置活动布局xml(RelativeLayout)的大小,但我不能设置maxHeight,我只能设置高度,但我不能硬编码那里的高度,因为我有保存和取消按钮设置至android:layout_alignParentBottom="true",以便在键盘弹出时它们可以保持在键盘上方。 (硬编码活动布局高度,防止保存/取消按钮保留在键盘顶部)

谢谢,有没有人知道如何设置最大对话框高度,最好是在主题级别?

1 个答案:

答案 0 :(得分:2)

使用此方法通过Dialog主题修复活动的Window高度。

public static void maxinumDialogWindowHeight(Window window) {
    WindowManager.LayoutParams layout = new WindowManager.LayoutParams();
    layout.copyFrom(window.getAttributes());
    layout.height = WindowManager.LayoutParams.FILL_PARENT;
    window.setAttributes(layout);
}

setContentView()之后使用它(它会将窗口布局重置为wrap_content):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.messages);
    if (getWindow().isFloating()) ViewHelper.maxinumDialogWindowHeight(getWindow());

    // rest of your code...
}