ICS Holo Dialog主题有什么问题?

在冰淇淋三明治中使用Holo Dialog主题( @android:style/Theme.Holo.Dialog )的活动遇到了一些奇怪的问题。

他们似乎忽略了他们的布局,并填充整个屏幕,而不是他们的XML布局布局的宽度和高度。 同样的布局正在蜂巢期待,但不是在冰淇淋三明治。

例:

正确的方法(蜂窝) 在这里输入图像说明

不正确的方法(冰淇淋三明治) 在这里输入图像说明

两个设备都运行完全相同的应用程序版本,并使用完全相同的布局。 问题的布局如下:

 <?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中被打破?

更新:

我已经做了一些更多的testing,看起来894dp的宽度或更less会产生“正确”的外观,但是如果将宽度设置为895dp或更多,将会是不正确的外观。 模拟器的行为方式是一样的。 这是非常奇怪的…

在这里输入图像说明

Solutions Collecting From Web of "ICS Holo Dialog主题有什么问题?"

我不认为ICS不鼓励对话。 事实上,他们在Androiddevise中拥有整个页面 。 事实上 , DialogFragment (甚至在Android支持库中提供 )比传统的Dialog更受欢迎 。

我证实了你对全屏popup对话框的观察,但是这种行为是依赖于设备的。 在我的Xoom平板电脑上,它发生在915dp,而不是895.在我的Galaxy Nexus上,它发生在444dp。 而在我的Galaxy Tab 10.1上,它并没有发生。

如果您深入了解源代码,您可以看到Holo对于较小的屏幕有一个Dialog主题,而对于较大的屏幕则有Holo.Dialog.FixedSize 。 我原以为这是基于显示器的大小,而不是布局的大小,但也许我会误会。 我会试图找出是什么原因导致跳跃。

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

Android的所有版本都忽略对话框主题布局xml的宽度/高度。

为了解决这个问题,在调用后:

 setContentView(R.layout.contacts_preferences); 

添加一行:

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

WRAP_CONTENT满足您的需求。

尝试交换您的LinearLayout为一个RelativeLayout。 这将做的伎俩:)

不知何故,LinearLayouts总是在对话框中显示时填充屏幕。 RelativeLayouts不。