Android API 18中的windowContentOverlay发生了什么



将手机升级到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级上

相关内容

  • 没有找到相关文章

最新更新