ActionBarDrawerToggle与DrawerLayout

Android 项目总结(View控件之ActionBarDrawerToggle) 阅读详情

ActionBarDrawerToggle 是 DrawerLayout.DrawerListener 实现。和 NavigationDrawer 搭配使用,推荐用这个方法,符合Android design规范。

我们先来看看 NavigationDrawer 里面的 ActionBarDrawerToggle 是如何编写的。

01// ActionBarDrawerToggle ties together the the proper interactions
02// between the navigation drawer and the action bar app icon.
03// 动作条抽屉切换器 将 抽屉 与 app icon动作条 绑定正确的交互。
04mDrawerToggle = new ActionBarDrawerToggle(
05        getActivity(),                    /* host Activity */
06        mDrawerLayout,                    /* DrawerLayout object */
07        R.drawable.ic_drawer,             /* nav drawer image to replace 'Up' caret */
08        R.string.navigation_drawer_open,  /* "open drawer" description for accessibility */
09        R.string.navigation_drawer_close  /* "close drawer" description for accessibility */
10) {
11    @Override
12    // 当抽屉关闭时
13    public void onDrawerClosed(View drawerView) {
14        super.onDrawerClosed(drawerView);
15        // 如果该Fragment对象没有被添加到了drawerView中
16        if (!isAdded()) {
17            return;
18        }
19        // 系统调用onPrepareOptionsMenu()去 update menu
20        getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
21    }
22
23    @Override
24    // 当抽屉打开时
25    public void onDrawerOpened(View drawerView) {
26        super.onDrawerOpened(drawerView);
27        if (!isAdded()) {
28            return;
29        }
30         
31        // 如果 变量“用户正在使用的抽屉” 没有设置
32        if (!mUserLearnedDrawer) {
33            // The user manually opened the drawer; store this flag to prevent auto-showing
34            // the navigation drawer automatically in the future.
35            // 用户手动打开抽屉;存储该标志,以防止自动显示在后面的导航抽屉。
36            mUserLearnedDrawer = true;
37            // 设置偏好
38            SharedPreferences sp = PreferenceManager
39                    .getDefaultSharedPreferences(getActivity());
40            sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
41        }
42
43        getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
44    }

ActionBarDrawerToggle 的作用:

  • 改变android.R.id.home返回图标。
  • Drawer拉出、隐藏,带有android.R.id.home动画效果。
  • 监听Drawer拉出、隐藏;

有几点解释一下:

1. getActivity().invalidateOptionsMenu(); 在运行时改变menu item的状态。你需要重写onPrepareOptionsMenu() ,它方便你对item移除,添加,使不可用等。在android 3.0以上,你必须调用invalidateOptionsMenu() 。

当你要update你的menu时,因为action bar是一直出现的。然后系统将调用onPrepareOptionsMenu()更改menu。

Activity与Fragment中都有关于menu的一系列的方法,并且都是自动的在框架中回调的。其中onCreateOptionsMenu()只是在创建menu时调用一次,但menu存在的时候是不会重复调用的。更新menu时,从activity中主动的调用 invalidateOptionsMenu() 方法,那么activity在显示menu之前自然会回调onPrepareOptionsMenu(Menu menu),再在该方法内实现更新的细节即可。

如果Fragment中没有invalidateOptionsMenu()方法,并且当menu存在的时候fragment也不会调用onCreateOptionsMenu()方法,那么我们可以在Fragment中直接调用setHasOptionsMenu()方法,将该方法设置为true,它就会调用onCreateOptionsMenu(),如此一来我们的目的就达到了。

2. isAdded();

public final boolean isAdded() 如果该Fragment对象被添加到了它的Activity中,那么它返回true,否则返回false。先判断 Fragment 是否 add,这样就能做到多个Fragment切换不重新实例化。

最后不要忘了

1// 给抽屉Layout绑定切换器监听
2mDrawerLayout.setDrawerListener(mDrawerToggle);
Android自带的DrawerLayout和ActionBarDrawerToggle实现侧滑效果 主要就是一下这几句,使用ActionBarDrawerToggle实现侧滑各种效果 : initToolBar(mToolbar,true,""); DrawerLayout drawer = (DrawerLayout) findView(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle... 阅读详情

相关推荐

ActionBarDrawerToggle

一个关于 ActionBarDrawerToggle 的小测试,以actionbar 的home按钮去打开和关闭DrawerLayout,希望能够给初学者一个小小帮助

用Android自带的DrawerLayout和ActionBarDrawerToggle实现侧滑效果

首先上效果图: 先说一下toolbar上的箭头实现: // 这两句显示左边的三条杠,如果要变为白色在toolbar的布局文件里添加这两句:// android:popupTheme="@style/ThemeOverlay.AppCompat.Light"// app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionB

miyuexingchen的专栏 1万+

侧滑菜单效果和手势滑动改变导航栏Demo

侧滑菜单效果和手势滑动改变导航栏Demo ActionBar SlidingMenu GestureDetector混合使用 实现多功能导航 代码详细注释 适合初学者

Android中DrawerLayout和ActionBarDrawerToggle 的三种使用方式

Android中DrawerLayout和ActionBarDrawerToggle的使用方式主要有以下三种: 第一种方式 第二种方式 第三种方式 从上面的演示效果我们可以发现,这三种使用方式主要区别是在左侧拉出的界面掩盖的位置不同,第一个种方式掩盖Toolbar控件下方界面,第二种方式掩盖状态栏下面的界面,第三种方式是全屏幕掩盖。下面我们主要介绍这三种方式的实现步骤。 1

MG_ZXC的专栏 4604

MATLAB演示元胞自动机算法

一、元胞自动机理论 元胞自动机与格子理论是一个非常好的模型,许多复杂的问题都可以通过它来建立模型,下面就简要介绍一下。 元胞自动机 实质上是定义在一个具有离散、有限状态的元胞组成的元胞空间上,并按照一定的局部规则,在离散的时间维度上演化的动力学系统。 元胞 元胞又可称为单元、细胞,是元胞自动机的最基本的组成部分。 元胞具有以下特点: 元胞自动机最基本的单元。 元胞有记忆贮存状态的功...

frange zone 2万+

5G NR PDCCH实战解析:从DCI格式到CORESET配置的完整指南

本文深入解析5G NR PDCCH的实战配置,涵盖DCI格式选择、CORESET配置及Search Space优化等关键内容。基于3GPP R16标准,提供现网部署中的典型问题解决方案,如覆盖边缘失步、多用户调度冲突等,帮助提升控制信令传输效率。特别针对5G NR PDCCH的灵活资源分配和自适应编码机制进行详细探讨。

weixin_29231263的博客 498

抽屉动画效果的标题栏以及滑动页面

实现这个动画效果的标题栏主要要用到ToolBar以及ActionBarDrawerToggle 首先在build.gradle中添加依赖如下: implementation 'com.android.support:appcompat-v7:26.1.0' 之后在布局中添加一个ToolBar以及主要界面和需要左侧向右滑动出现的布局: <?xml version="1.0" encodin...

u014131314的博客 555

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5567

Android 5.0特性(ActionBarDrawerToggle)

1,实现效果 点击切换按钮弹出菜单,并且菜单和按钮动画,有联动效果 2,实现逻辑 【1】MainActivity的onCreate方法中创建,ActionBarDrawerToggle (V7包下) 布局文件 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widge...

Cricket_7的博客 1126

WSL中使用VMD图形化界面

【代码】WSL中使用VMD图形化界面。

handsome213的博客 840

MaxEnt软件的下载与安装

1、下载网站:http://lucky-boy.ys168.com/ (这是之前在网上搜到的,里面有许多软件安装包,感谢网页主的资源共享,违权必删)

weixin_42191203的博客 2万+

Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合

ActionBarDrawerToggle是一个开关,用于打开/关闭DrawerLayout抽屉 ActionBarDrawerToggle 提供了一个方便的方式来配合DrawerLayout和ActionBar,以实现推荐的抽屉功能。即点击ActionBar的home按钮,即可弹出DrawerLayout抽屉。 在Activity中的两个回调函数中使用它:    onConfigu

打渔还是晒网 —— stone 3万+

29. 如何通过 ABAP 代码给 SAP OData 元数据增添注解

我们先看下效果,在 MPC_EXT 类的 DEFINE 方法里编写 ABAP 代码之后,用 Postman 使用 url 访问 OData metadata,在返回的数据里,能看到我们用 ABAP 代码添加的自定义注解。你好,请问可以不可以在odata里面通过什么设置,从而自动给metadata.xml中加上注解,实现value help的功能,还是说每次需要在metadata.xml中修改?的词汇引用,然后为命名空间 com.sap.vocabularies.UI.v1 声明了一个别名。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1659

DrawerLayout与ActionBarDrawerToggle使用

actionbar必须在Android3.0 以上的版本中使用如果需要兼容要使用v7包 看知乎客户端那个侧滑栏挺好玩的,查了一下是v7包里面带的效果,于是就写了个demo 效果就是那个   一个“三“  然后点击变”←“。图片显示不出来好蛋疼。。  首先是布局: 这里比较重要的是,这个DrawerLayout下必须有两个view,而且必须有属性。。,否则点击按钮会报错。因为点击

航天飞哥的博客 863

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android DrawerLayout 的addDrawerListener无效,没有回调,没有返回结果。DrawerLayout监听ActionBarDrawerToggle

将 mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() 替换为 mDrawerLayout.addDrawerListener(new ActionBarDrawerToggle DrawerLayout mDrawerLayout=findViewById(R.id.drawerLayout); ...

woqq863787405的博客 2014

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

DrawerLayout和ActionBarDrawerToggle

说明:DrawerLayout的作用就是左侧滑出、右侧滑出菜单。需要和ActionBarDrawerToggle来配合使用。如果对ActionBar不理解,请先熟悉ActionBar。 1、首先配置DrawerLayout。 说明:此时配置完毕,就可以滑动屏幕左侧和右侧,此时已经可以滑出菜单了。 2、然后新建ActionBarDrawerToggle类。 mToggle = new...

weixin_33743880的博客 126

ActionBar、Drawerlayout、ActionBarDrawerToggle实现抽屉效果

写好Drawerlayout布局 实现抽屉布局 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_

harrain的博客 999
上一篇: 90%人都理解错了的ViewPager的onPageScrolled方法
下一篇: onOptionsItemSelected(具体什么流程)?
Manaasdfasdf
博客等级 码龄11年 131粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值