我正在开发我的 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>
当我在菜单项上选择时,它会毫无问题地显示粉红色背景。
我不知道为什么我在应用程序上运行时它不会在启动时显示
你知道为什么我运行它时它不会在启动时显示吗?
有什么办法可以让它们在我跑步时启动?
如果是这样,你能给我举个例子吗?使用我自己的自定义菜单让它们在启动时运行的正确方法是什么??
根据您对 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"
}
我建议做一个默认背景,你可以在你的
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"