新的Theme.AppCompat ActionBar高度

6

在使用21版本的appcompat库时,?android:attr/actionBarSize返回的值是48 dips,就像是Holo主题而不是Material主题。事实上它更大一些 - 56 dips。

有人找到了这个问题的解决方法吗?

2个回答

16

不需要任何解决方法。如果您正在使用?android:attr/actionBarSize,Android会在当前使用的平台中查找该值。如果您运行的是Android 5.0以下版本,则结果将为48dp。
由于您的项目中使用了appcompat-v7库,因此应该使用?actionBarSize。这将返回预期的56dp,因为系统将在您的项目中查找该值,而appcompat库定义了actionBarSize。

如果您想自己尝试,请使用以下代码片段来测试所描述的行为:

int[] textSizeAttr = new int[] { android.R.attr.actionBarSize, R.attr.actionBarSize };
TypedArray a = obtainStyledAttributes(new TypedValue().data, textSizeAttr);
float heightHolo = a.getDimension(0, -1);
float heightMaterial = a.getDimension(1, -1);

Log.d("DEBUG", "Height android.R.attr.: " + heightHolo + "");
Log.d("DEBUG", "Height R.attr.: " + heightMaterial + "");

注意:此将返回像素大小。例如,在我的 Nexus 5 上,目前运行的是4.4版本,android.R.attr.actionBarSize 返回 144像素(48 dp),R.attr.actionBarSize 返回 168像素(56 dp)。


在一个使用appcompat v21的项目上测试此代码,在Nexus 4(v5.0.0)上,此代码将返回112px的值... Nexus 5(v5.0.1)上,booth返回168px。 - SjoerdvGestel
这是有道理的,因为Nexus 4的分辨率为720p,而N5的分辨率为1080p。 - reVerse
1
但是您是否注意到,两个值也相同?在您的示例中,您说要接收两个不同的结果(144px和168px)。 - SjoerdvGestel
2
哦,是的,我理解你的意思。在Lollipop以下的所有版本中,android.R.attr.actionBarSize大小为48dp。现在在5.0上,android.R.attr.actionBarSizeR.attr.actionBarSize相同(56dp)。 - reVerse
不要忘记执行 a.recycle(); - natinusala

-1

这些对我来说在使用appcompact v-21时有效

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <item name="android:actionBarSize">46dp</item>
            <item name="actionBarSize">46dp</item>
    </style>

2
总的来说,这不太好。除了46dp之外,还有更多的actionBarSizes - 横向手机(较小),平板电脑(较大)... - Perry_ml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接