Android, как сделать прозрачным строку состояния правильно

? Sandak @ | Original: StackOverFlow
---

Я пытаюсь сделать прозрачным строку состояния на Android 4.4+ Я знаю, как сделать его прозрачным, определяя свой ​​собственный стиль :

<style name="Theme.MyTheme" parent="Theme.MyTheme.Base">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item> </style>

Я нашел здесь:  http://stackoverflow.com/a/20573595/2633630

Проблема в том, что, когда в строке состояния прозрачна, она не совпадать с цветом панели действий и деятельности в фоновом режиме Просмотрен:  Android, как сделать прозрачным строку состояния правильно

Так я обнаружил, что я могу использовать Android : fitsSystemWindows = " истинный " и Android : clipToPadding = " ложных" в моем макет, который я нашел здесь http://mindofaandroiddev.wordpress.com/2013/12/28/making-the-status-bar-and-navigation-bar-transparent-with-a-listview-on-android-4-4-kitkat/

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_darkRed"
android:fitsSystemWindows="true"
android:clipToPadding="false"    
tools:context="com.sandak.......">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"> 
....

Это решает верхнюю проблемы с прозрачной строке состояния и выглядит нормально .. К сожалению, есть проблема в нижней на " панели навигации " с помощью кнопок система, которая красной и не прозрачны, как я хочу :  Android, как сделать прозрачным строку состояния правильно

Я пытался все возможные варианты для достижения результатов при работе, но я не могу понять, как ее решить. Моя единственная рабочего раствора установлен верхний отступ о 60dp на корневой элемент . Но это решение является уродливым и на разных устройствах может отличаться и может быть не работает.

Я нашелнесколько приложений на Google Play, который работает нормально с прозрачным фоном, так что я интересно, как они делают свою работу.

Например:  https://play.google.com/store/apps/details?id=com.trello и некоторые другие

---

Top 5 ответ

1Sandak @

// UPDATE : Ладно, это довольно старый ответ . Теперь вы можете использовать материале темы справиться с этим, и это очень легко. Просто установите целевой API для 21+, пользоваться библиотекой поддержки, если вам нужно, и создать тему с материальной тему, где вы можете указать в строке состояния цвет непосредственно

<style name="AppTheme"
        parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- colorPrimary is used for the default action bar background -->
        <item name="colorPrimary">@color/color_primary</item>

        <!-- colorPrimaryDark is used for the status bar -->
        <item name="colorPrimaryDark">@color/color_primary_dark</item>

        <!-- colorAccent is used as the default value for colorControlActivated
             which is used to tint widgets -->
        <item name="colorAccent">@color/accent_orange</item>
    </style>

================================================== =====================

OLD ANSWER:

Хорошо, похоже, что я могу решить мою проблему. Это нелучший и яркий решение, но оно работает решение. Если кто-нибудь в будущем будет узнать лучше и более четкое решение, пожалуйста, дайте мне знать, и я буду обновлять мой ответ / или отметить свой ​​ответ как правильный. Но сейчас, у меня нет лучшего решения, чем этот маленький рубить :

Корневой элемент макета должен быть RelativeLayout . Чем должны следовать вашей основной макет, как ScrollView или каких-либо других макетов, это не имеет значения. В конце, прежде чем закрыть Относительная тег Макет следующим пустой LinearLayout который создал тот же фон, как панели действий и фиксированную высоту (высота строки состояния ).

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.sandak....">
<ScrollView
    android:fitsSystemWindows="true"
    android:clipToPadding="false"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
.... all your main views etc..
</ScrollView>
<LinearLayout
        android:id="@+id/statusBarBackgroundLinearLayout"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="30dp"
        android:background="@color/background_darkRed"
        android:clickable="false"
        android:focusable="false">
     </LinearLayout>
</RelativeLayout>

Ок, тогда вы должны установить в коде и ту же высоту Линейный Макет какСтрока состояния есть:

private void setStatusBarBackground(View rootView) {
        getStatusBarLayout(rootView);
        statusBarHeight = getStatusBarHeight();
        setStatusBarLayoutHeight(statusBarHeight);
    }

    private void getStatusBarLayout(View rootView){
        statusBarBackgroundLinearLayout = (LinearLayout) rootView.findViewById(R.id.statusBarBackgroundLinearLayout);
        if (isPreKitkatDevice()) {
            hideStatusBarLayout();
        }
    }

    private int getStatusBarHeight() {
        int statusBarHeight = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }
        return statusBarHeight;
    }

    private boolean isPreKitkatDevice(){
        return Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT;
    }

    private void hideStatusBarLayout(){
        statusBarBackgroundLinearLayout.setVisibility(View.INVISIBLE);
    }        

    private void setStatusBarLayoutHeight(int height){
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) statusBarBackgroundLinearLayout.getLayoutParams();
        layoutParams.height = height;
    }

А потом просто позвонить setStatusBarBackground в свой ​​метод OnCreate ( ). Это рабочий раствор для всех разного рода deviceas . Для устройствах до KITKAT где прозрачный фон не позволил вам придется скрывать линейной компоновки .