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来锚定自己:当你没有一个时,它会使用完整的内容视图(在你的情况下,包括状态栏下的区域) – 添加一个fitsSystemWindows=trueCoordinatorLayout应该这样做。

你也可以用findViewById(android.support.design.R.id.design_navigation_view)来代替Snackbar声明中的任何CoordinatorLayout

那么正确的答案是添加android:paddingbottom="50dp"到你的CoordinatorLayout,虽然我不确定如果所有的导航栏大小是50 DP