Подтвердить что ты не робот

Что случилось с windowContentOverlay в Android API 18?

После обновления моего телефона до Android 4.3 я заметил, что тень под панелью действий больше не отображается. В моем приложении у меня есть пользовательская тень с помощью windowContentOverlay:

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

Он всегда показывался, но теперь он прошел API 18. Удаление этой строки из темы ничего не меняет. в то время как в других версиях API он показывает небольшую тень по умолчанию.

Кто-нибудь еще заметил эту проблему?

4b9b3361

Ответ 1

Это официально ошибка и будет исправлена ​​для следующей версии платформы: https://code.google.com/p/android/issues/detail?id=58280

UPDATE: Это, похоже, исправлено на уровне API 19

Ответ 2

Мне удалось обойти эту ошибку платформы, добавив следующий метод к моей базе FragmentActivity и вызвав ее в onCreate после того, как макет был завышен:

/**
 * Set the window content overlay on device 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 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 a valid resource, set it as the foreground drawable
                // for the content view
                if (tv.resourceId != 0) {
                    ((FrameLayout) contentView).setForeground(
                            getResources().getDrawable(tv.resourceId));
                }
            }
        }
    }
}

Это работает хорошо, потому что вам не нужно менять свои темы или динамически добавлять представления в свои макеты. Он должен быть совместим с переходом и может быть легко удален после исправления этой ошибки.