web-dev-qa-db-ja.com

Android API 18のwindowContentOverlayはどうなりましたか?

携帯電話をAndroid 4.3にアップグレードした後、アクションバーの下の影が表示されなくなっていることに気付きました。私のアプリでは、windowContentOverlayを使用したカスタム影があります。

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

それは常に表示されていましたが、現在はAPI 18で消えています。テーマからその行を削除しても何も変わりません。他のAPIバージョンでは、デフォルトのわずかな影が表示されます。

他の誰かがその問題に気づいていますか?

28
Romain Piel

これは公式にはバグであり、次のプラットフォームリリースで修正されます。 https://code.google.com/p/Android/issues/detail?id=5828

更新:これはAPIレベル19で修正されたようです

18
Romain Piel

次のメソッドをベース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));
                }
            }
        }
    }
}

テーマを変更したり、レイアウトにビューを動的に追加したりする必要がないため、これはうまく機能します。上位互換性があり、このバグが修正されたら簡単に削除できます。

30
twaddington