gpt4 book ai didi

android - 使用 fitsSystemWindows 时没有灰色边框的 NavigationView

转载 作者:行者123 更新时间:2023-11-29 14:24:10 25 4
gpt4 key购买 nike

我用 Android Studio 2.0 创建了一个新的应用程序,我想在 Toolbar 下方放置 Navigation Drawer。我知道 Material Design 规范说它应该位于 Toolbar 上方,但我的 Drawer 不会有那么多条目,我想看到 Google 提供的整洁的图标动画。

我想通过将 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" 这样我就可以为状态栏着色。但是当我这样做时,抽屉导航确实有一个灰色的顶部边框。

enter image description here

当我按照 Google 指定的方式(在工具栏上方)使用它时,边框会很好,但这样看起来很难看。有什么方法可以删除它吗?

我尝试覆盖 NavigationView.onInsetsChanged(Rect rect) 并能够将项目放在顶部,但灰色边框仍然存在。

最佳答案

我也很头疼想弄清楚这个问题并设法找到了this它描述了 CoordinatorLayout 如何将 fitsSystemWindows 传递给它的 child 。我肯定认为这是一个错误,因为 NavigationView 已经将它设置为 false,但后来我读到:

NavigationView takes care of the scrim protection of the status bar for you, ensuring that your NavigationView interacts with the status bar appropriately on API21+ devices.

来自 Android Developers Blog .所以我不确定该怎么想。我认为这可能是因为 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;
}
});
}
}
}

应该给你这个:

Screenshot

关于android - 使用 fitsSystemWindows 时没有灰色边框的 NavigationView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36650074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com