我正在针对平板电脑优化我们的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"
,以便在键盘弹出时它们可以保持在键盘上方。 (硬编码活动布局高度,防止保存/取消按钮保留在键盘顶部)
谢谢,有没有人知道如何设置最大对话框高度,最好是在主题级别?
答案 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...
}