android navigation drawer怎么用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android navigation drawer怎么用?相关的知识,希望对你有一定的参考价值。

新建了API为8-15(android 2.3.3- 4.0.3) 的navigation drawer项目,目前找到了侧边栏抽屉怎么改了。剩下的是怎么添加自己的Fragment,因为之前没接触到Fragment这块,现在临时抱佛脚了。其实有个例子是最好的,不过google给的那个例子好像版本跟我的不一样,结构差很多,越看越糊涂
怎么自己设计一个Fragment?怎么把自己设计的多个Fragment加入到程序里?切换Fragment的代码写在哪?怎么写?
一个小时内给说明白的追加100分。
其实上传一个简单示例项目就好了,在关键地方加上中文注释。谢谢了

用新版本的SDK可以自动生成一个简单的NavigationDrawer项目

如果SDK版本太新的问题,运行的效果可能会不如人愿,如下图

由于项目中用的appcompat版本是 com.android.support:appcompat-v7:22.0.0

IDE自动导入的却是v4的ActionBarDrawerToggle,所以会出现上面的三条杆居中的问题。

import android.support.v4.app.ActionBarDrawerToggle;


IDE中报出v4的ActionBarDrawerToggle已经过期,如图

把v4改为v7就可以了
import android.support.v7.app.ActionBarDrawerToggle;

改成v7会报一个错误:

mDrawerToggle = new ActionBarDrawerToggle(
                getActivity(),                    /* host Activity */
                mDrawerLayout,                    /* DrawerLayout object */
                R.drawable.ic_drawer,             /* nav drawer image to replace 'Up' caret */
                R.string.navigation_drawer_open,  /* "open drawer" description for accessibility */
                R.string.navigation_drawer_close  /* "close drawer" description for accessibility */
        )

因为v7的构造函数没有传入图标了,删掉R.drawable.ic_drawer, 就可以了。这时候运行就可以发现,原来的R.drawable.ic_drawer变成了酷炫的动画——箭头与三条杆之间切换的动画。

如果一定要下面这张图片的效果的话,是要把appcompat版本强行换为v4的

参考技术A 如果是学习代码的话,建议还是学习官方的,不过SlidingMenu有很多功能,比如滑出菜单时控制后面的背景动不动,动多少,貌似Navigation Drawer的背景不能动的。开源项目被官方API取代是趋势,因为大家都觉得官方的接口用着放心嘛,但开源项目可能更灵活。

向@react-navigation/drawer 组件发送道具

【中文标题】向@react-navigation/drawer 组件发送道具【英文标题】:sending props to @react-navigation/drawer component 【发布时间】:2020-12-11 21:21:56 【问题描述】:

我正在尝试将道具发送到 Drawer.Screen 中的组件。我正在使用@react-navigation/drawer。我终于将道具发送到导航容器,但我无法将道具发送到 Drawer.Screen 中的 component=homeStackScreen。如何将道具发送到 homeStackScreen 类。而且它没有写在文档中。需要帮助。

const Drawer = createDrawerNavigator();

<NavigationContainer>
            <Drawer.Navigator initialRouteName="Home">
                props.leftMenu.map((x,index) =>                 
                <Drawer.Screen name=x.name key = index component=homeStackScreen />
                )
            </Drawer.Navigator>
</NavigationContainer>

【问题讨论】:

【参考方案1】:

您可以通过以下方式轻松地将 props 从 Drawer.Screen 传递给组件,方法是替换 component= 中的简单组件并将其替换为匿名函数,该函数将返回我们需要导航的组件。

通常,我们这样声明一个屏幕:

<Drawer.Screen name="Home" component=HomeScreen/>

要将props传递给组件,我们将在匿名函数的帮助下进行以下修改并传递props。

像这样:

<Drawer.Screen name="Home" component=() => <HomeScreen data="your_data"/>/>

简单示例:


    return (
        <NavigationContainer>
            <Drawer.Navigator initialRouteName="Home">
                <Drawer.Screen name="Home" component=() => <HomeScreen data="your_data"/>/>
                <Drawer.Screen name="Notifications" component=NotificationsScreen />
            </Drawer.Navigator>
        </NavigationContainer>
    );



//.............

function HomeScreen(data) 
    return (
            <View>
            <Text>data</Text>
            </View>
    );

在您的情况下,它应该类似于下面给出的代码:

const Drawer = createDrawerNavigator();

<NavigationContainer>
            <Drawer.Navigator initialRouteName="Home">
                props.leftMenu.map((x,index) =>                 
                <Drawer.Screen name=x.name key = index component=() => <homeStackScreen data=x/> />
                )
            </Drawer.Navigator>
</NavigationContainer>

更多类似问题:Passing state array from class into function with pure react native

【讨论】:

看起来您正在为屏幕“测试菜单”的“组件”道具传递内联函数(例如,component=() => )。传递内联函数将导致组件状态在重新渲染时丢失并导致性能问题,因为它在每次渲染时都重新创建。您可以将该函数作为子函数传递给“屏幕”以实现所需的行为。

以上是关于android navigation drawer怎么用?的主要内容,如果未能解决你的问题,请参考以下文章

Android - Navigation Drawer

Android 开发之Navigation Drawer

Android Drawer - 使用 Navigation.findNavController() 导航到多个片段

SlidingMenu 库和 Android Navigation Drawer 有啥区别?

Android官方终于支持 Navigation Drawer(导航抽屉)模式

如何在 Android 中为 Navigation Drawer 添加一个分区分隔符?