4

我正在为平板电脑优化我们的 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>

使用此主题的活动以对话框的形式打开,横向显示效果很好。但在纵向模式下,对话框垂直填充屏幕,看起来很傻。

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

我还尝试设置活动布局 xml (RelativeLayout) 的大小,但我无法设置 maxHeight,我只能设置高度,但我无法在那里对高度进行硬编码,因为我将保存和取消按钮设置为android:layout_alignParentBottom="true"所以他们键盘弹起时可以留在键盘上方。(硬编码活动布局高度,防止保存/取消按钮留在键盘顶部)

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

4

1 回答 1

2

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

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()(它会将 Window 布局重置为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...
}
于 2013-02-03T07:21:15.453 回答