我使用Android Studio 2.0创建了一个新应用,我想让我的导航抽屉位于Toolbar
下方。我知道Material Design规格说它应该高于Toolbar
,但我的抽屉没有那么多条目,我希望看到谷歌提供的整洁的图标动画。
我将DrawerLayout
置于顶级CoordinatorLayout
内,以获得我想要的内容。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.company.app.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:openDrawer="start">
<include layout="@layout/content_main" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
</android.support.design.widget.CoordinatorLayout>
我在顶层布局上使用android:fitsSystemWindow="true"
,因此我可以为状态栏着色。但是当我这样做时,导航抽屉确实有一个灰色的顶部边框。
当我按照Google指定的方式(在工具栏上方)使用它时,边框会很好但这样看起来很丑陋。有什么办法可以删除吗?
我尝试覆盖NavigationView.onInsetsChanged(Rect rect)
并且能够将项目放在顶部但灰色边框仍然存在。
答案 0 :(得分:11)
我也很头疼,试图弄清楚这一点并设法找到this,其中描述CoordinatorLayout
如何将fitsSystemWindows
传递给其孩子。我肯定认为这是一个错误,因为NavigationView
已将其设置为false
,但后来我读到了这个:
来自Android Developers Blog的NavigationView为您处理状态栏的稀松布保护,确保您的NavigationView在API21 +设备上正确地与状态栏进行交互。
。所以我不确定该怎么想。我想这可能是因为NavigationView
从未打算以这种方式使用。
尽管如此,这是一个可以尝试解决灰色条问题的解决方案,但我还没弄清楚它是否会导致问题。如果是这样,请回复。
在activity_main.xml
:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_marginTop="100dp"
android:fitsSystemWindows="false"/>
</android.support.design.widget.CoordinatorLayout>
在MainActivity
课程中:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
navigationView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
return insets;
}
});
}
}
}
应该得到你: