SnackBar и fitsSystemWindow

У меня есть приложение, которое использует fitsSystemWindows, чтобы иметь возможность рисовать фон позади панели навигации и состояния. К сожалению, SnackBar, похоже, игнорирует fitsSystemWindows = true из контейнера. Я сварил проблему до этого минимального приложения:

проблема

стиль:

<resources> <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="android:windowBackground">@color/accent_material_dark</item> <item name="android:fitsSystemWindows">false</item> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> </style> </resources> 

расположение:

 <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" android:fitsSystemWindows="true" tools:context=".MainActivity"> <Button android:id="@+id/button" android:text="@string/hello_world" android:layout_width="match_parent" android:layout_height="match_parent"/> </RelativeLayout> 

активность:

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { Snackbar.make(v,"This Snackbar should fitSystemWindows",Snackbar.LENGTH_INDEFINITE).show(); } }); } } 

Кто-нибудь знает обходное решение?

Я опубликовал минимальное приложение, чтобы показать проблему здесь: https://github.com/ligi/SnackBarFitsSystemWindowProblem

Solutions Collecting From Web of "SnackBar и fitsSystemWindow"

Snackbar всегда будет искать CoordinatorLayout для привязки себя: когда у вас его нет, он использует полное представление содержимого (которое в вашем случае включает область под строкой состояния) – добавление CoordinatorLayout который имеет fitsSystemWindows=true должен Сделайте это.

Вы также можете использовать следующую строку вместо любого объявления CoordinatorLayout в Snackbar с помощью findViewById (android.support.design.R.id.design_navigation_view) .

Ну, правильный ответ – добавить android:paddingbottom="50dp" к вашему CoordinatorLayout, хотя я не уверен, что все размеры панели навигации составляют 50 дп