将手机升级到Android 4.3后,我注意到操作栏下面的阴影不再显示。在我的应用程序中,我有一个使用windowContentOverlay
:的自定义阴影
<item name="android:windowContentOverlay">@drawable/shadows_bottom</item>
它一直在显示,但现在它已经在API 18上显示了。从主题中删除该行不会改变任何内容。而在其他API版本上,它显示默认的轻微阴影。
其他人注意到这个问题了吗?
我能够通过将以下方法添加到我的基本FragmentActivity
并在布局膨胀后在onCreate
中调用它来解决这个平台错误:
/**
* Set the window content overlay on device's that don't respect the theme
* attribute.
*/
private void setWindowContentOverlayCompat() {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2) {
// Get the content view
View contentView = findViewById(android.R.id.content);
// Make sure it's a valid instance of a FrameLayout
if (contentView instanceof FrameLayout) {
TypedValue tv = new TypedValue();
// Get the windowContentOverlay value of the current theme
if (getTheme().resolveAttribute(
android.R.attr.windowContentOverlay, tv, true)) {
// If it's a valid resource, set it as the foreground drawable
// for the content view
if (tv.resourceId != 0) {
((FrameLayout) contentView).setForeground(
getResources().getDrawable(tv.resourceId));
}
}
}
}
}
这样做效果很好,因为您不必更改主题或在布局中动态添加视图。它应该是前向兼容的,一旦这个错误被修复,就可以很容易地删除。
这是一个正式的错误,将在下一个平台版本中修复:https://code.google.com/p/android/issues/detail?id=58280
更新:这似乎固定在API 19级上