我在冰淇淋三明治中使用Holo Dialog主题(@android:style/Theme.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或更多,那将是不正确的外观。模拟器的行为方式相同。这非常奇怪......
答案 0 :(得分:6)
我不认为ICS会阻止对话。实际上,他们有一整个page at Android Design。事实是,DialogFragment(甚至在Android Support library中提供)优先于遗产Dialog。
我证实了您对弹出全屏幕对话框的观察,但行为与设备有关。在我的Xoom平板电脑上它发生在915dp,而不是895.在我的Galaxy Nexus上,它发生在444dp。在我的Galaxy Tab 10.1上,它根本不会发生。
如果您深入了解源代码,您可以看到对于较小的屏幕,有一个Dialog主题来自Holo
,而对于较大的屏幕,则来自Holo.Dialog.FixedSize
。我原以为这是基于显示尺寸,而不是布局尺寸,但也许我会弄错。我会试着找出导致跳跃的原因。
答案 1 :(得分:1)
我自己找不到答案,所以我最终删除了对话框主题,而是使用了全宽标准主题布局。我认为ICS不鼓励使用对话框,所以也许这就是它改变的原因。
答案 2 :(得分:0)
所有版本的Android都会忽略Dialog主题布局xml的宽度/高度。
要解决此问题,请在致电:
之后setContentView(R.layout.contacts_preferences);
添加一行:
getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
或WRAP_CONTENT
满足您的需求。
答案 3 :(得分:0)
尝试将LinearLayout换成RelativeLayout。这样就可以了:)
当在对话框中显示时,不知何故,LinearLayouts总是填满屏幕。 RelativeLayouts没有。