【问题标题】:How to display an activity or fragment on navigationView in Android?如何在 Android 中的 navigationView 上显示活动或片段?
【发布时间】:2020-02-13 08:14:38
【问题描述】:

在 Swift 中,我们可以使用一个名为“SideMenu”的库来在 SideMenu 上显示一个 viewController。

现在,我正在使用 Android 进行编码。我想在 NavigationView 中显示活动,我们只能显示菜单或标题。 我无法在 NavigationView 上显示活动或片段。

你能帮我或给我一些关于这个问题的建议吗?

ANDROID STUDIO NAVIGATION VIEW

XCODE SWIFT SIDE MENU

【问题讨论】:

  • 您的意思是为您的应用程序添加抽屉布局吗?
  • 我有一个 DrawerLayout 但我无法在其中添加片段。我只能用菜单添加标题。否则在 Swift 中,我可以直接添加视图。
  • 好的,android 和 iOS 都有一些不同的行为

标签: android drawerlayout navigationview side-menu


【解决方案1】:

如果您使用的是android导航组件,您可以看到完整的详细信息来实现这一点并将片段替换为对应于用户点击/选择drawer layout with navigation component
如果您不使用 android 导航组件而只使用抽屉布局,您可以看到 drawer layout

【讨论】:

    【解决方案2】:

    Android 应用可以一次显示一个活动(它最近发生了变化,但在您的场景中仍然如此)。在您的情况下,您应该膨胀 View 或 Fragment。只需将您的布局或片段放入NavigationView:

    <?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="match_parent" />
    
        <com.google.android.material.navigation.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer">
    
            <TextView
                android:text="Custom View"
                android:layout_gravity="center"
                android:background="#ff0000"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    
        </com.google.android.material.navigation.NavigationView>
    
    </androidx.drawerlayout.widget.DrawerLayout>
    

    NavigationView 扩展了 FrameLayout,因此如果您要膨胀菜单,它将重叠。因此,您可能想要删除:

    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer"
    

    【讨论】:

    • 是的,我已经放置了一个菜单和标题。但是我需要显示一个没有“MenuItem”的视图,如 Swift Side Menu 的图片所示。
    • 比使用答案中的代码并删除菜单膨胀 - 只需删除:app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"
    • 抱歉,我现在明白了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多