2016-11-26 2 views
1

В моих styles.xml, теме приложения имеет следующие свойства:fitsSystemWindows делает мой полупрозрачный статусной серый

<!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 

    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:windowTranslucentStatus">true</item> 
    <item name="android:fitsSystemWindows">true</item> 
</style> 

Если android:fitsSystemWindows является false, мой statusbar будет прозрачным, но некоторые макеты не влезут на экран. Поэтому, чтобы макеты соответствовали экрану, я помещал android:fitsSystemWindows в true, что затем делает все подходящим. Но панель состояния становится серой, как на рисунке ниже.

Что случилось, что я ошибаюсь?

enter image description here

+1

Вместо добавления 'fitsSystemWindow' на всю тему, просто использовать, что только на панели инструментов. –

ответ

1

Ее было время, так как это было предложено, но я на том же стенде прямо сейчас, и то, что я сделал, чтобы преодолеть эту проблему, было: 1) Удалить все Android: fitsSystemWindows от обоих стилей и макеты (XML) 2) Программные вычислить высоту строки состояния 3) Применение верхнего отступа с расчетным значением в строке состояния на корневых viewgroups

Для расчета высоты STATUSBAR я использовал следующий фрагмент. Это был привезен из некоторых веб-сайт, который Имя автора я не могу вспомнить прямо сейчас (К сожалению об этом ..)

public static int getStatusBarHeight(Activity activity) { 
    int result = 0; 
    int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android"); 
    if (resourceId > 0) { 
     result = activity.getResources().getDimensionPixelSize(resourceId); 
    } 
    return result; 
} 
+0

Спасибо. Я попробую это – Muddz