Android自定义菜单导航抽屉背景在启动时没有显示

问题描述 投票:0回答:2

我正在开发我的 Android 应用程序,为导航抽屉制作自定义菜单项。一切正常,尤其是当我点击菜单项时,但是当我在应用程序上运行时,我看不到导航抽屉中的粉红色背景启动,因为我看到它是空的。

应该是这样显示的:

但这就是它现在显示的内容:

这是主要活动:

public static DrawerLayout drawer;
public static NavigationView navigationView;
private ArrayList<MenuNavItem> list= new ArrayList<>();
private MenuNavItem mailfolder = null;
private NavController navController;
private RecyclerView recyclerView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = findViewById(R.id.drawer_layout);
    navigationView = findViewById(R.id.nav_view);

    ArrayList<MenuNavItem> list= new ArrayList<>();
    MenuNavItem MenuInbox = new MenuNavItem("Inbox", total_inbox, R.drawable.ic_baseline_inbox_24);
    list.add(MenuInbox);
    list.add(MenuImportant);
    list.add(MenuOutbox);

    adapter = new CustomMenuAdapter(context, list);
    recyclerView.setAdapter(adapter);

    // menu should be considered as top level destinations.
    mAppBarConfiguration = new AppBarConfiguration.Builder(R.id.nav_inbox)
        .setDrawerLayout(drawer)
        .build();
    navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        style="@style/Widget.Custom.NavigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/navigation_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>

content_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/app_bar_main"
    android:orientation="horizontal"
    android:layout_marginTop="20dp">

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

navigation_drawer.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">
    <include layout="@layout/nav_header_main"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

当我在菜单项上选择时,它会毫无问题地显示粉红色背景。

我不知道为什么我在应用程序上运行时它不会在启动时显示

你知道为什么我运行它时它不会在启动时显示吗?

有什么办法可以让它们在我跑步时启动?

如果是这样,你能给我举个例子吗?使用我自己的自定义菜单让它们在启动时运行的正确方法是什么??

java android android-studio navigation navigation-drawer
2个回答
0
投票

根据您对 Mohsen 的回答有问题的评论:无法解析符号 'android:navigationView' 尝试将其包含在您的 build.gradle 文件中

dependencies {
//your version
    def nav_version = "2.3.5"
    implementation "androidx.navigation:navigation-fragment:$nav_version"
    implementation "androidx.navigation:navigation-ui:$nav_version"
}

0
投票

我建议做一个默认背景,你可以在你的

styles.xml
文件中添加以下行:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- ... -->
    <item name="android:navigationViewStyle">@style/NavigationViewStyle</item>
</style>

<style name="NavigationViewStyle">
    <item name="android:background">@drawable/navigation_background</item>
</style>

然后,在

navigation_background.xml
目录下创建
res/drawable
文件,代码如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/pink" />
</shape>

这应该将粉红色背景设置为 NavigationView 的默认背景,并在您启动应用程序时可见。

编辑以解决您的问题:

你错过了在你的应用程序的

styles.xml
文件中添加 NavigationView 属性添加这个

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!-- Add this line to enable navigation drawer -->
        <item name="android:navigationViewStyle">@style/NavigationViewStyle</item>
    </style>

    <!-- Add this style to customize navigation view -->
    <style name="NavigationViewStyle" parent="Widget.Design.NavigationView">
<item name="android:background">@drawable/navigation_background</item>
        <item name="android:layout_marginTop">24dp</item>
        <item name="android:layout_marginBottom">24dp</item>
        <item name="android:layout_width">280dp</item>
    </style>
</resources>

并确保在 xml 中制作新样式

style="@style/MyNavigationViewStyle"

© www.soinside.com 2019 - 2024. All rights reserved.