ICS Holo Dialog主题有什么问题?
我在使用Holo Dialog主题(@android:style/Theme.Holo.Dialog
)的冰淇淋三明治中发现了一个奇怪的问题。ICS Holo Dialog主题有什么问题?
看起来他们忽略了他们的布局,并填充整个屏幕而不是他们的XML布局的布局宽度和高度。同样的布局正在像Honeycomb那样工作,但不是冰淇淋三明治。
实施例:
正确的方法(蜂窝)
(冰淇淋三明治)
这两种设备正在运行的应用程序的版本完全相同的不正确的方法,并使用完全相同的布局。这是有问题的布局:
<?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以上,”会是不正确的样子。模拟器的行为方式相同。这是非常奇怪的......
我不认为ICS不鼓励对话。的确,他们有一个完整的page at Android Design。确切的是DialogFragment(甚至在Android Support library中提供)优于传统Dialog。
我证实了你对全屏弹出对话框的观察,但行为是依赖于设备的。在我的Xoom平板电脑上,它发生在915dp,而不是895.在我的Galaxy Nexus上,它发生在444dp。在我的Galaxy Tab 10.1上,它根本不会发生。
如果您深入了解源代码,您可以看到对于较小的屏幕,有一个对话框主题是从Holo
开始的,而对于较大的屏幕则是Holo.Dialog.FixedSize
。我原以为这是基于显示器尺寸,而不是布局尺寸,但也许我会误会。我会试图找出导致跳跃的原因。
谢谢,会很好!甚至不知道Holo.Dialog.FixedSize主题。 – 2012-04-04 13:06:39
我看到了同样的问题:使用Theme.Holo.Light主题的活动。 Dialog.NoActionBar主题在JellyBean上运行正常,但在ICS上有上面的'超大尺寸'问题。 – 2013-03-28 10:03:21
我找不到这个自己的答案,所以我最终放弃了对话的主题,并用来代替全宽标准的主题布局。我认为ICS不鼓励使用对话框,所以也许这就是它改变的原因。
Android的所有版本都忽略对话框主题布局xml的宽度/高度。
为了解决这个问题,打完电话后:
setContentView(R.layout.contacts_preferences);
添加一行:
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
或WRAP_CONTENT
满足您的需求。
不,他们没有。就像我说的,它在Honeycomb中工作正常。 – 2012-05-03 09:26:33
尝试交换您的LinearLayout以实现RelativeLayout。这将做的伎俩:)
不知何故LinearLayouts总是填充屏幕时,显示在对话框中。 RelativeLayouts不。
这看起来很奇怪。这是在黑暗中拍摄的,但有时在更改构建目标后,我会在我的应用中遇到奇怪的图形故障。我不知道为什么,但清理该项目将始终解决它们。就像我说的那样,在黑暗中拍摄,但可能很简单。 – adneal 2012-02-06 16:48:12
谢谢,只是再次尝试过,但似乎没有任何效果。我刚刚更新了我的问题 - 它看起来像是在894和895 dp宽度之间发生的。 – 2012-02-06 16:55:56
您的屏幕截图是使用两个单独的设备拍摄的吗?您的文章假定这种行为在HoneyComb上始终正常工作,但在ICS上不会正常工作,但是您可能遇到的问题完全取决于屏幕的大小?如果不是,那么您可以考虑创建两个AVD(一个运行3.0,另一个运行4.0),并使用两个AVD进行测试,以确定问题实际上是否取决于Android SDK版本号。 – 2012-05-09 05:08:32