Android API 18中的windowContentOverlay发生了什么?

将手机升级到Android 4.3后,我注意到操作栏下面的阴影不再显示。 在我的应用程序,我有一个自定义阴影使用windowContentOverlay

 <item name="android:windowContentOverlay">@drawable/shadows_bottom</item> 

它一直在显示,但现在已经在API 18上了。从主题中删除该行不会改变任何内容。 而在其他API版本中则显示默认的轻微阴影。

其他人已经注意到这个问题?

Solutions Collecting From Web of "Android API 18中的windowContentOverlay发生了什么?"

我能够解决这个平台的bug通过添加以下方法到我的基础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)); } } } } } 

这很好地工作,因为你不必改变你的主题或dynamic添加视图到你的布局。 它应该是向前兼容的,并且可以很容易地删除一旦这个bug已经修复。

这是一个正式的错误,将在下一个平台版本中修复: https : //code.google.com/p/android/issues/detail?id = 58280

更新:这似乎是固定在API级别19