2012-02-06 86 views
18

我在使用Holo Dialog主题(@android:style/Theme.Holo.Dialog)的冰淇淋三明治中发现了一个奇怪的问题。ICS Holo Dialog主题有什么问题?

看起来他们忽略了他们的布局,并填充整个屏幕而不是他们的XML布局的布局宽度和高度。同样的布局正在像Honeycomb那样工作,但不是冰淇淋三明治。

实施例:

正确的方法(蜂窝) enter image description here

(冰淇淋三明治) enter image description here

这两种设备正在运行的应用程序的版本完全相同的不正确的方法,并使用完全相同的布局。这是有问题的布局:

<?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以上,”会是不正确的样子。模拟器的行为方式相同。这是非常奇怪的......

enter image description here

+0

这看起来很奇怪。这是在黑暗中拍摄的,但有时在更改构建目标后,我会在我的应用中遇到奇怪的图形故障。我不知道为什么,但清理该项目将始终解决它们。就像我说的那样,在黑暗中拍摄,但可能很简单。 – adneal 2012-02-06 16:48:12

+0

谢谢,只是再次尝试过,但似乎没有任何效果。我刚刚更新了我的问题 - 它看起来像是在894和895 dp宽度之间发生的。 – 2012-02-06 16:55:56

+0

您的屏幕截图是使用两个单独的设备拍摄的吗?您的文章假定这种行为在HoneyComb上始终正常工作,但在ICS上不会正常工作,但是您可能遇到的问题完全取决于屏幕的大小?如果不是,那么您可以考虑创建两个AVD(一个运行3.0,另一个运行4.0),并使用两个AVD进行测试,以确定问题实际上是否取决于Android SDK版本号。 – 2012-05-09 05:08:32

回答

6

我不认为ICS不鼓励对话。的确,他们有一个完整的page at Android Design。确切的是DialogFragment(甚至在Android Support library中提供)优于传统Dialog

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

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

+0

谢谢,会很好!甚至不知道Holo.Dialog.FixedSize主题。 – 2012-04-04 13:06:39

+0

我看到了同样的问题:使用Theme.Holo.Light主题的活动。 Dialog.NoActionBar主题在JellyBean上运行正常,但在ICS上有上面的'超大尺寸'问题。 – 2013-03-28 10:03:21

1

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

0

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

为了解决这个问题,打完电话后:

setContentView(R.layout.contacts_preferences); 

添加一行:

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

WRAP_CONTENT满足您的需求。

+0

不,他们没有。就像我说的,它在Honeycomb中工作正常。 – 2012-05-03 09:26:33

0

尝试交换您的LinearLayout以实现RelativeLayout。这将做的伎俩:)

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