Прозрачная навигация без отображения макета под панелью состояния

Я использую новый флаг Android 4.4 FLAG_TRANSLUCENT_NAVIGATION чтобы включить панель навигации (назад, кнопка дома и т. Д.) В нижней части экрана полупрозрачного. Это прекрасно работает, но побочным эффектом этого является то, что макет моей активности теперь отображается под строкой состояния в верхней части экрана (хотя я не установил строку состояния как полупрозрачную). Я хочу избежать хакерского исправления, применяя прокладку к вершине макета.

Есть ли способ настроить навигацию как полупрозрачную, в то время как нормальная строка отображается нормально и НЕ позволяет отображать макет под ней?

Код, который я использую, выглядит следующим образом:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } 

благодаря

Ответ ianhanniballake на самом деле работает, но вы не должны использовать android:fitsSystemWindows="true" на верхнем уровне. Используйте это свойство следующим образом:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/colorPrimaryDark"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ffffff" android:fitsSystemWindows="true"> <!-- Your other views --> </LinearLayout> </LinearLayout> 

Как вы можете видеть, вы должны установить цвет на верхнем уровне и поместить его в другой контейнер.

Добавьте android:fitsSystemWindows="true" в ваш вид верхнего уровня – android: fitsSystemWindows автоматически изменит размер представления, чтобы учесть системные окна, такие как строка состояния.