18

@android:style/Theme.Holo.Dialog在 Ice Cream Sandwich 中使用 Holo Dialog 主题 ( ) 的活动遇到了一些奇怪的问题。

似乎他们忽略了他们的布局并填充了整个屏幕,而不是他们的 XML 布局中的布局宽度和高度。相同的布局在 Honeycomb 中可以正常工作,但在 Ice Cream Sandwich 上却没有。

例子:

正确的方法(蜂窝) 在此处输入图像描述

错误的方式(冰淇淋三明治) 在此处输入图像描述

两台设备都运行完全相同版本的应用程序,并且使用完全相同的布局。这是有问题的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="940dp"
    android:layout_height="600dp"
    android:layout_margin="10dp" >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="940dp"
        android:layout_height="600dp"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:smoothScrollbar="true"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp" >
    </GridView>

</LinearLayout>

关于如何解决这个问题的任何想法?我的基于 ICS 的 Galaxy Nexus 也出现了类似的问题,它完全忽略了match_parent高度和宽度的标签。ICS 中的对话框主题是否损坏?

更新:

我做了一些更多的测试,似乎 894dp 或更少的宽度会产生“正确”的外观,但如果我将宽度设置为 895dp 或更大,这将是不正确的外观。模拟器的行为方式相同。这非常奇怪……

在此处输入图像描述

4

4 回答 4

6

我不认为 ICS 不鼓励对话。事实上,他们在 Android Design 有一整页。事实是DialogFragment(甚至在Android 支持库中提供)比旧版Dialog更受欢迎。

我证实了您对弹出全屏对话框的观察,但行为取决于设备。在我的 Xoom 平板电脑上,它发生在 915dp,而不是 895。在我的 Galaxy Nexus 上,它发生在 444dp。而在我的 Galaxy Tab 10.1 上,它根本不会发生。

如果您深入研究源代码,您会发现有一个 Dialog 主题是从Holo较小的屏幕和Holo.Dialog.FixedSize较大的屏幕继承而来的。我原以为这是基于显示尺寸,而不是布局尺寸,但也许我会弄错了。我会尝试找出导致跳跃的原因。

于 2012-04-04T12:12:01.873 回答
1

我自己找不到答案,所以我最终放弃了对话框主题,而是使用了全角标准主题布局。我认为 ICS 不鼓励使用对话框,所以也许这就是它改变的原因。

于 2012-02-11T17:27:51.757 回答
0

所有版本的 Android 都会忽略 Dialog 主题布局 xml 的宽度/高度。

要解决此问题,请在调用后:

setContentView(R.layout.contacts_preferences);

添加一行:

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);

WRAP_CONTENT满足您的需要。

于 2012-05-03T07:38:00.573 回答
0

尝试将您的 LinearLayout 换成 RelativeLayout。那会成功的:)

不知何故,LinearLayouts 在对话框中显示时总是填满屏幕。相对布局没有。

于 2013-06-19T18:32:52.037 回答