对于Android来说,侧滑功能用到了抽屉布局DrawerLayout,我们只要把页面的根布局设置为DrawerLayout,并指定弹出的侧滑视图,就能通过右拉页面左侧边缘,从而拉出定义好的侧滑视图。...:title="退出"/> NavigationView还提供了以下方法,用于在代码中操作导航视图: addHeaderView : 添加头部视图。...需实现接口OnNavigationItemSelectedListener的方法onNavigationItemSelected,该方法在点击具体的菜单项时触发。...如果想让菜单图标显示原来的面貌,可在代码中调用setItemIconTintList方法,将图标色彩设置为null。下面是显示原始菜单图标颜色的导航页面截图。 ?...至于导航菜单上面的头部视图,也可调用ListView的addHeaderView方法来实现。 下面是采用ListView定制的导航菜单页面截图。 ?
一、错误记录 在 Android 中 , 使用 Kotlin 开发 , 为 BottomNavigationView 设置 OnNavigationItemSelectedListener 监听接口 ;...设置的接口是一个匿名内部类 BottomNavigationView.OnNavigationItemSelectedListener 对象 , 其中定义了一个 boolean onNavigationItemSelected...(@NonNull MenuItem var1); 函数 , 需要返回一个布尔值 ; 直接使用 return 返回布尔值 , 就报如下错误 ; 二、问题分析 1、匿名内部类 BottomNavigationView...调用 setOnNavigationItemSelectedListener 函数 , 设置的监听器是 BottomNavigationView.OnNavigationItemSelectedListener...; 最原始的设置方式如下 , 首先创建 BottomNavigationView.OnNavigationItemSelectedListener 类型的 对象表达式 , 也就是匿名内部类 , 然后 调用
看名字我们就知道这个组件仅限 Android 平台能用。Android 中的 DrawerLayout 就是一个抽屉导航组件,所以这个组件的功能当然也是一样的。...locked-open,意思是此时抽屉将保持打开,不可用手势关闭。 记住:无论抽屉处于那种状态,我们都可以调用openDrawer/closeDrawer这 两个方法打开和关闭。...,on-drag:是当拖拽开始的时候隐藏键盘 onDrawerClose func 每当导航视图被关闭时调用的函数 onDrawerOpen func 当导航视图被打开后调用该方法 onDrawerSlide...func 每当导航视图(抽屉)产生交互相互作用的时候调用此回调函数 onDrawerStateChanged func 每当抽屉的状态变化时调用此回调函数。...它将只对API 21以上的效果 DrawerLayoutAndroid 方法 openDrawer(0) 打开抽屉导航 closeDrawer(0) 关闭抽屉导航 实例演示 还是老样子,看代码前,我们先看看效果图
使用步骤: 创建一个DrawerLayout 为了添加导航抽屉,你需要在你的布局界面中声明一个DrawerLayout对象作为布局的根节点。...它包含了两个子节点:一个FrameLayout它包含了主要内容(在运行时将会被Fragment替换) 和 一个ListView作为导航抽屉,上面titlebar 上图标,负责打开、关闭抽屉; <?...主内容View被设置成匹配父View的宽和高,因为当导航抽屉隐藏的时候它要填充整个UI。...为了保证用户无论怎样都能看到主内容的一部分,导航抽屉的宽度不能超过320dp 初始化Drawer List 在你的Activity中,要做的第一件事是初始化导航抽屉的列表项。...当用户选择了抽屉列表里面的一个Item时, 系统调用onItemClickListener上的onItemClick(), 给setOnItemClickListener().
先上效果图: 主界面上drawlayou 和NavigationView形成抽屉效果,布局文件如下: <android.support.v4.widget.DrawerLayout xmlns...mNav.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected...----------抽屉部分结束----------- tab layout 和view pager 实现联动效果: // 初始化ViewPager的适配器,并设置给它...R.color.main_blue_light, R.color.main_blue_dark); mSwipeRefreshLayout.setOnRefreshListener(this); 下拉刷新刷新数据的接口实现的方法...getItemCount() { return list.size(); } } adapter的写法根之前BaseAdapter 很类似,需要特别注意的是: 加载布局文件的方法一定是这个
在本文中,我们将为大家讲解另外一个用例,即类似操作栏 (Action Bar)、底部标签栏或者抽屉型导航栏之类的 UI 组件如何在应用中实现导航功能。...我需要在应用中增加一些页面,所以有必要使用抽屉式导航栏或者底部标签栏来辅助用户导航。但是我们该如何使用这些 UI 组件来集成导航功能呢?通过点击监听器手动触发导航动作吗? 不需要!无需任何监听器。...抽屉式导航栏 虽然看上去不错,但是如果您设备的屏幕尺寸较大,那么底部标签栏恐怕无法提供最佳的用户体验。...和之前针对 BottomNavigationView 所做的相类似,这里创建一个新的方法,并且调用 setupWithNavController() 函数将 navController 传入 NavigationView...为了使代码保持整洁、各个元素之间更加清晰,我们会在新的方法中实现相关操作,并且在 onCreate() 中调用该方法。
主内容区的布局代码必须放在侧滑菜单布局的前面, 因为 XML 元素按 z 序(层叠顺序)排列,并且抽屉式导航栏必须位于内容顶部。...我们需要调用setDrawerListener方法,实现DrawerLayout.DrawerListener作为监听器。我们需要覆盖四个方法。...mDrawerLayout.setDrawerListener(new DrawerListener() { /** * 当抽屉滑动状态改变的时候被调用 * 状态值是STATE_IDLE...(int arg0) { } /** * 当抽屉被滑动的时候调用此方法 * arg1 表示 滑动的幅度(0-1) */ @Override public...public void onDrawerOpened(View arg0) { } /** * 当一个抽屉完全关闭的时候调用此方法 */ @Override
的实例; 1.2.3 调用ActionBar的setDisplayHomeAsUpEnabled()方法让导航按钮显示出来; 1.2.4 调用了setHomeAsUpIndicator...()方法来设置一个导航按钮图标; 1.2.5 在onOptionsItemSelected()方法中对HomeAsUp按钮的点击事件进行处理——调用DrawerLayout的openDrawer...这里我们并没有改动多少代码, 首先调用findViewById()方法得到了DrawerLayout的实例, 然后调用getSupportActionBar()方法得到了ActionBar的实例,虽然这个...接着调用ActionBar的setDisplayHomeAsUpEnabled()方法让导航按钮显示出来, 又调用了setHomeAsUpIndicator()方法来设置一个导航按钮图标。...接着调用了setNavigationItemSelectedListener()方法来设置一个菜单项选中事件的监听器,当用户点击了任意菜单项时,就会回调到onNavigationItemSelected
目录 1、布局 2、常用属性 3、设置监听 4、默认选中 5、配合ViewPager 6、添加角标 7、修改图标大小 8、去除波纹效果 9、Github MaterialDesign中的一个底部导航栏.../navigation"/> 2、常用属性 app:itemBackground 背景颜色 app:itemIconTint 图标颜色 app:itemTextColor 文字颜色 app:menu 导航菜单...BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected...BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected...BottomNavigationView的item选中的时候让ViewPager切换page 6、添加角标 查看:BottomNavigationView添加角标(BadgeView) 7、修改图标大小 源码开放方法
() 方法, 即可获取; -- 设置 ActionBar 显示 : ActionBar.show() 方法; -- 设置 ActionBar 隐藏 : ActionBar.hide() 方法; (2)...ActionBar 相关代码解析 (1) ActionBar 开启导航相关方法 开启 Tab 导航 : actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS...自定义 Fragement 相关解析 (1) 获取 Activity 对象 获取方法 : Activity activity = getActivity(), 直接调用 getActivity() 即可获取...; 用处 : 该 Activity 对象在 创建布局文件时使用; (2) 获取参数 参数获取 : 在创建 Fragement 时通过 Bundle 对象传入了参数, 可以通过调用 getBundle()...ActionBar 相关方法 a .设置 List 导航方式 设置方法 : actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
* 在各个代码块进行基本相同的代码调用,侵入性高,如果后期进行更换SDK,有可能会进行大量改动 * 手动进行埋点可能导致认为疏忽造成的埋点丢失 * 只能根据埋点进行用户行为回溯,有些细节和流程无法衔接上...,无法还原用户使用场景 * 每个版本迭代都需要PM,RD进行埋点梳理,时间进行消耗 全埋点 * 无法在每个按钮,页面加载调用代码,只需要在应用初始化加载即可 * 用户行为触发自动上报,无需PM...使用AspectJ, 思路:在程序编译期间,在相应的onClick方法调用前或后插入埋点代码。...+ onNavigationItemSelected.name + onNavigationItemSelected.desc, onNavigationItemSelected) 上述步骤的意思:...先判断该类中实现的接口是否包含OnNavigationItemSelectedListener接口,接着判断实现该接口的方法是不是onNavigationItemSelected,如果符合,那么代表这个类包含该接口并实现了方法
> 复制代码 这样可以在保证方形表盘不受影响的情况下,圆形布局的内容,不会超过显示边界: 导航抽屉栏 为了节省宝贵的显示空间,通常手表应用是没有标题栏的,在使用 ViewPager 的时候,也没有 TabLayout...,提示用户这里是有东西可以下滑的,也可以调用 controller.closeDrawer() 完全隐藏导航栏。...操作抽屉栏 当需要对当前页面进行一些操作的时候,但页面里又没有空间再放按钮了怎么办?既然可以从顶部下拉出导航栏,要不在底部上拉出一个操作栏?...自定义抽屉栏 导航栏 WearableNavigationDrawerView 和 操作栏 WearableActionDrawerView 用起来很简单,但是它们的样式是固定的,一个只能显示图标加标题...下面是一个简单的自定义底部抽屉栏布局: <android.support.wear.widget.drawer.WearableDrawerView android:id="@+id/action_drawer
抽屉(通常用于导航切换)是通过renderNavigationView方法渲染的,并且DrawerLayoutAndroid的直接子视图会成为主视图(用于放置你的内容)。...locked-open,意味着此时抽屉将保持打开,不可用手势关闭。 无论抽屉处于那种状态,都仍然可以调用openDrawer/closeDrawer这两个方法打开和关闭。...onDrawerClose function 每当导航视图(抽屉)被关闭之后调用此回调函数。 onDrawerOpen function 每当导航视图(抽屉)被打开之后调用此回调函数。...onDrawerSlide function 每当导航视图(抽屉)产生交互的时候调用此回调函数。 onDrawerStateChanged function 每当抽屉的状态变化时调用此回调函数。...renderNavigationView function 此方法用于渲染一个可以从屏幕一边拖入的导航视图。 样例 ?
-- 底部的导航view,菜单文件里定义了3个item --> <fragment android:id="@+id/nav_host_fragment"...mobile_navigation, <navigation xmlns:android="http://schemas.android.com/apk/res/android" android...BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected...(item.getItemId(), null, options); } 来到NavController, //NavController.java //省略调用链来到 void navigate(NavDestination
-- The Navigation view 左侧拉开之后的导航视图 -- <ListView android:id="@+id/left_drawer" android:layout_width...()获取碎片管理器,给碎片管理器开启事务,开启事务之后的碎片管理器用replace()方法将碎片的布局替换原来的主视图布局,这样一个碎片就添加进来了 最后别忘了关闭抽屉 @Override public...这是因为v7包版本过低,解决方法是在project:properties里target=android-8改为21以上就好 当抽屉打开的时候,标题栏改为”请选择”,当抽屉关闭的时候,标题栏变为原来的app...invalidateOptionsMenu()会重绘actionBar上的菜单项,执行这个方法的时候会回调onPreareOptionsMenu(),所以我们可以在这里通过判断抽屉处于打开还是关闭状态,....setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); 2)因为图标也是一个菜单项,所以点击它也是会调用
返回键一直是 Android 导航独具魅力的设计点。...因此,我们的设计目标之一就是确保返回手势符合人体工程学,具备高度可靠性且直观易用,并且在安排开发工作时,适当地调低应用抽屉、最近使用等低频导航操作的优先等级,首要考虑返回手势的需求。...比如说,我们发现 3% 到 7% 的用户 (具体比例因应用而异) 通过侧滑手势打开应用导航抽屉,其余用户则选择点击汉堡形菜单按钮来弹出抽屉。...改变用户的导航习惯并不是我们的目标,因此,我们尝试了许多方法来帮助用户区分抽屉手势和返回手势,不过结果并不乐观,用户试着通过侧滑触发返回操作,但是仍旧拖曳出了抽屉界面,致使用户对返回操作的信任度下降。...除了应用抽屉以外,适应时间也是一大问题: 用户平均需要 1 到 3 天才能适应手势导航,特别是,用户有些难以应付像左滑或者右滑跑马灯控件时却触发返回这样的情况。
我们一般手动切换Fragment时可以调用这个方法,最后就是跟踪到这里。...BottomNavigationView、DrawerLayout进行绑定: 3.4 setupActionBarWithNavController 不管是NavigationView还是Bottom``NavigationView,都会调用这个方法...,他是AppCompatActivity的一个扩展方法,调用的是NavigationUI这个类: public static void setupActionBarWithNavController(@...到这里基本的代码实现已经了解的差不多了,然后我回到了入口,通过初始化NavController,调用NavigationUI中的方法绑定NavigationView、ToolBar、BottomNavigationView...、DrawerLayout等布局,在调用navigate()方法后,改变状态,整个流程就走通了。
所以当用户点击某界面元素并需要触发导航的时候,您应该调用导航 API 使用其中一个操作来导航到图中的一个目的地。 操作还可以被用来定义传入目的地的参数,以及从源目的地和目的地进入退出的转场动画。...navigate() 方法,并传入在导航图中定义的 action_FirstFragment_to_SecondFragment 作为参数,会使应用导航到第二个目的地。...这一次,导航是由抽屉式导航栏中的菜单项触发的 当用户点击 DrawerLayout 中的菜单项时,应用会导航至和那些菜单项关联的目的地。...应用展示了 NavigationView (抽屉式导航栏) 覆盖在 activity 内容上方 接下来是 NavigationView,它是一个从左边划入的抽屉式导航栏。...大部分的导航相关的图像更新发生在 NavHostFragment 内部,但是系统中仍然存在其他需要更新且不在容器内的部件,比如我们上面看到的抽屉式导航栏,以及类似 tab bar 的元素 (该组件可以被用来展示当前目的地信息
领取专属 10元无门槛券
手把手带您无忧上云