DrawerLayout的基本使用

深入了解 CPU 的型号、代际架构与微架构! 阅读详情

DrawerLayout

介绍

DrawerLayout作为最顶部的View容器提供侧拉抽屉的功能.他依靠子View的android:layout_gravity属性来决定侧拉抽屉放置的方向.(记得使用start/end来支持不同的布局方向)

要使用DrawerLayout,将其作为你的根布局,然后主内容作为第一个子View添加进来,并且使用match_parent指定高度和宽度,接着侧拉抽屉的内容作为第二个子View添加进来,使用layout_gravity来控制侧拉抽屉放置的方向.一般侧拉抽屉使用match_parent作为高度,并且指定一个确定的宽度.

DrawerLayout.DrawerListener可以用来监听抽屉的动作和状态,避免在抽屉动画的时候执行layout动作等费时的操作,否则会导致卡顿,尽量在STATE_IDLE状态执行这些费时的操作.另外DrawerLayout.SimpleDrawerListener提供了默认的实现,你可以继承他来挑你感兴趣的进行监听.

根据安卓设计规范,任何在左边的抽屉都应该执行导航的操作,任何在右边的抽屉都应该执行对当前内容的一些操作,这个和Action Bar的逻辑相呼应.

例子

创建布局

首先将android.support.v4.widget.DrawerLayout添加到根布局,然后添加主内容(在你抽屉隐藏时需要显示的内容),接着添加抽屉.

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
  • 主内容必须是第一个DrawerLayout的子View,因为抽屉要显示在主内容的上方.
  • 主内容View必须设置宽高为match_parent,因为当抽屉隐藏时它代表你整个的UI内容.
  • 抽屉View必须设置androidLlayout_gravity属性为水平方向的值left/right或者为了支持其他水平布局的语言start/end
  • 抽屉View应当指定高度为match_parent,宽度为不大于320dp的值,这样可以保证抽屉显示时也可以看到主内容的一部分.

初始化抽屉的内容

就在Activity的onCreate方法初始化抽屉的内容就可以了,并不需要特殊处理.

public class MainActivity extends Activity {
    private String[] mPlanetTitles;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPlanetTitles = getResources().getStringArray(R.array.planets_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mPlanetTitles));

        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        ...
    }
}

监听抽屉的打开和关闭事件

通过你的DrawerLayout对象的setDrawerListener()设置一个DrawerLayout.DrawerListener来监听.
如果你使用Actionbar,那么你可以继承ActionBarDrawerToggle类.这个类也实现了DrawerLayout.DrawerListener接口,所以你还可以通过复写那些回调方法,而且,那个类也自动的帮你处理了action bar图标和抽屉的交互.

根据抽屉使用规范,你应该在抽屉显示的时候改变action bar的内容,例如改变title或者移除相对于主内容上下文关系的action.以下代码展示了你可以通过一个ActionBarDrawerToggle实例来复写DrawerLayout.DrawerListener的回调方法.

public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...

        mTitle = mDrawerTitle = getTitle();
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {

            /** 当抽屉完成关闭的时候调用. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu(); 
            }

            /** 当抽屉彻底打开的时候调用. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu(); 
            }
        };

        // 把drawer toggle当做DrawerListener一样使用
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

    /* 当我们调用invalidateOptionsMenu()时调用 */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // 当抽屉打开或者隐藏时,加载对应的action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }
}

接下来讨论ActionBarDrawerToggle构造函数的参数和处理action bar 图标交互的一些步骤.

随着App图标打开和关闭

用户可以通过侧拉手势打开导航抽屉,但是如果你在使用action bar,那么你也应该允许用户在点击action bar图标时打开和关闭抽屉.并且这个应用图标也应该使用一个特殊的图标来指示导航抽屉的存在.

为了使ActionBarDrawerToggle可以工作,我们还需要加一些代码,以便在特定的时候刷新状态.

public class MainActivity extends Activity {
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;
    ...

    public void onCreate(Bundle savedInstanceState) {
        ...

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(
                this,                  /* host Activity */
                mDrawerLayout,         /* DrawerLayout object */
                R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
                R.string.drawer_open,  /* "open drawer" description */
                R.string.drawer_close  /* "close drawer" description */
                ) {


            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getActionBar().setTitle(mTitle);
            }


            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(mDrawerTitle);
            }
        };

               mDrawerLayout.setDrawerListener(mDrawerToggle);

        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // 同步状态
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // 为了使action bar图标可以响应点击
        if (mDrawerToggle.onOptionsItemSelected(item)) {
          return true;
        }
        // Handle your other action bar items...

        return super.onOptionsItemSelected(item);
    }

    ...
}

摘录翻译自Android Developer

efm32 入门.pdf 本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。 立即下载

相关推荐

ROS基础(一)——命令行代码(以小乌龟程序为例)

ROS学习(一)——命令行代码(以小乌龟程序为例)1 基础命令行语句1.1 roscore1.2 rqt_graph(显示系统计算图)1.3 rosnode(显示所有节点相关信息)1.4 rostopic(和话题相关)2 服务类型指令rosservice同时存在两只海龟3 指令记录 1 基础命令行语句 从大二四旋翼无人机编队后就没再接触过ROS了,最近由于科研任务需要重新捡起来,打算系统学一下!学习过程参考古月居老师的视频,有兴趣的同学可以去[BliBli]学习。 学习平台:Ubuntu 18.04 硬件

北理自动化小白 6267

DrawerLayout的使用

一、DrawerLayout简介     是Google公司提供的侧滑栏,内置在SDK中 二、使用DrawerLayout ①、加载DrawerLayout并显示 layout/activity_main(在layout中添加DrawerLayout) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an

chen19960724的博客 822

中介效应、调节效应与交互效应:从概念辨析到统计建模全指南

在社会科学与数据分析研究中,理解变量之间的因果关系与条件性影响是核心任务之一。回归分析作为最基础的统计工具,常被用于探索自变量对因变量的作用机制,而中介效应与调节效应则分别回答了“如何影响”与“何时影响不同”的深层问题。中介效应通过路径分析拆解因果链条,揭示内部的传导机制;调节效应则借助交互项识别影响的边界条件。Bootstrap法已成为检验间接效应的主流手段,而简单斜率分析则让调节作用的模式更加直观。无论是用户研究、医学统计还是产品数据分析,掌握这些模型都能帮助研究者构建更具解释力的实证框架。本文基于大量

weixin_29051149的博客 330

DrawerLayout使用一二事

最近老大让我试试用Drawerlayout去做侧滑效果,不要再用什么鬼popoupwindow之类的了。 我惆怅的想了想,用官方的应该会比较给力,于是,drawerlayout用起。 感觉用起来还是挺方便的,稍微注意一点东西就好了。 先循例来一下代码: <android.support.v4.widget.DrawerLayout xmlns:android="http:/

小夫的博客 724

XGBoost调参新姿势:Bayesian优化实战指南(附完整代码)

本文详细介绍了如何使用Bayesian优化方法高效调优XGBoost模型参数。通过解析Bayesian优化核心原理和XGBoost关键参数,提供完整的实战代码示例,帮助读者掌握这一智能调参技术,显著提升模型性能。文章特别适合机器学习工程师和数据科学家阅读。

weixin_42536058的博客 366

2025.06.24【R语言】|clusterProfiler安装与常见报错FAQ全解

本文介绍了clusterProfiler工具的安装方法及常见报错解决方案。安装可通过Bioconductor或Conda完成,需注意安装配套注释包。文中列举了10种常见报错,包括依赖包缺失、ID类型不匹配、物种不支持等问题,并给出具体解决方法。最后总结了GO/KEGG富集分析的标准流程,包括ID转换、富集分析和可视化步骤,为生物信息学分析提供实用参考。建议使用R≥4.2版本,并确保正确调用BiocManager进行安装。

5994

DrawerLayout的简单使用

使用DrawerLayout的注意事项: 1,主内容View一定必须是DrawerLayout的第一个子View,并且只能是布局,如果是 Button 就会导致 Button 覆盖整个界面。 2,主视图宽度和高度需要match_parent 3,必须指定侧滑视图在左边还是右边 android:layout_gravity=”start” 在左边。 android:

FM电台的博客 466

FLAC3D数值三轴测试

本文介绍了使用FLAC3D进行数值三轴测试的命令流程。通过建立圆柱体模型,设置Mohr-Coulomb本构模型及材料参数,施加边界条件和荷载,并定义Fish函数监测应变和应力。命令包括模型创建、网格划分、材料属性定义、边界约束、荷载施加以及结果监测等步骤。该流程可用于模拟岩土材料在三轴条件下的力学响应,为数值分析提供参考。完整代码可从指定链接下载获取。

qq_36980284的博客 99

Android入门教程五十五之DrawerLayout(官方侧滑菜单)的简单使用

1.使用的注意事项 1.主内容视图一定要是DrawerLayout的第一个子视图 2.主内容视图宽度和高度需要match_parent 3.必须显示指定侧滑视图的android:layout_gravity属性 android:layout_gravity = “start”时,从左向右滑出菜单 android:layout_gravity = “end”时,从右向左滑出菜单 不推荐使用left和r

无名 800

如何使用 Python 爬取 58 同城招聘信息

职位名称:招聘的岗位名称,如“前端开发”、“数据分析师”等。公司名称:招聘公司的名称。薪资待遇:职位的薪资范围,通常以“面议”、“10k-20k”这样的形式表示。工作地点:公司所在的城市及具体地址。公司福利:例如五险一金、带薪年假、绩效奖金等。发布时间:职位信息的发布时间。一个典型的招聘页面 URL 格式通常如下:在这个页面上,职位信息会分页展示,爬虫需要模拟翻页,获取多个页面的招聘信息。

2201_76125261的博客 1291

1、掌握 Microsoft Dynamics 365 Business Central 开发全解析

本文全面解析了Microsoft Dynamics 365 Business Central的开发全流程,涵盖开发环境搭建、AL语言扩展开发、定制解决方案实现、高级开发技术、文件与报表处理、打印功能、调试与性能优化、API使用、Azure和Power Platform集成、DevOps实践以及生成式AI应用。同时探讨了开发工具技巧、常见问题解决、开发流程优化、团队协作要点及未来技术趋势,帮助开发者系统掌握Business Central开发核心技能,提升企业级应用开发效率与质量。

food6的博客 111

DrawerLayout使用详解

DrawerLayout 抽屉布局 文章目录效果:布局关联Toolbar手动打开关闭监听github:https://github.com/yechaoa/MaterialDesign 效果: 布局 <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:...

yechaoa 4万+

Educoder:爬虫实战——求是网周刊文章爬取

第1关:获取新闻url importrequests importre defgeturls(): #**********Begin**********# url='http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm' headers={ 'User-Agent':'Mozilla/5.0(Linux;Android6.0;Nexus5Buil...

weixin_46026136的博客 5254

AndoidX 中 DrawerLayout 的使用

AndoidX 中 DrawerLayout 的使用欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图...

Snitro的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

DrawerLayout 的使用

drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。 实例

nkdwslsd的专栏 356

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

DrawerLayout的基本用法

今天看到一篇博客,有种相见恨晚的感觉。DrawerLayout是google支持的,感觉很棒.....

2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

DrawerLayout简单使用

一.DrawerLayout其实是一个布局空间,与linearLayout一样,区别是 DrawerLayout带有滑动功能 DrawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏,主内容区的部分可以随着菜单的点击而变化(需要自己实现) 使用注意事项: 主内容视图一定要是DrawerLayout的第一个子视图,就是抽屉没有打开是现实的布局 主内容视图宽度和高度...

KWON_QMY的博客 2501

Android 控件DrawerLayout的基本使用

在做项目时,使用到了左滑出现菜单栏,遵循了原来学习的使用SlidingMenu开源库,但是对于有的手机居然报了错(#80 java.lang.StackOverflowErrorcom.jeremyfeinstein.slidingmenu.lib.CustomViewAbove.dispatchDraw(CustomViewAbove.java:827)),于是考虑使用drawlayout这个控件

Tom91的博客 700

DrawerLayout

DrawLayout我们应该使用androidx.drawerlayout.widget.DrawerLayout 并非V4版本的android.support.v4.widget.DrawerLayout 首先简单过一下DrawerLayout源码(这里截取重点) public class DrawerLayout extends ViewGroup { ... private final ViewDragHelper mLeftDragger; private final Vie

CAir2的专栏 565

DrawerLayout和ToolBar

DrawerLayout和ToolBar一、效果二、ToolBar常用方法三、DrawerLayout的常用方法四、ToolBar和DrawerLayout代码 一、效果 二、ToolBar常用方法 1.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);去掉标题栏; 2.Toolbar.setLogo(),设置logo图片; 3.Toolb...

weixin_43863384的博客 897

Android补全计划 DrawerLayout使用

Override//不显示标题//把开关和DrawerLayout关联//覆写方法让系统判断点击的图标后是否弹出侧拉页面@Override弊端:一:这种方式虽然可以在布局文件中来设置图标,但是无法给图标设置选择器二:由于是在ToolBar的根节点来设置图片,所以不能只当图片摆放的位置优点:直接在XML中指定图片,而且一行代码搞定ToolBar继承自ViewGroup,完全可以用来盛放控件<ImageView。

weixin_52282455的博客 874

Android DrawerLayout使用

drawerLayout 无法切换主页面内容,无法滑动

leonshiwl的博客 447

Android侧滑菜单——DrawerLayout详解使用

介绍drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出现之后,google借鉴而出现的产物。drawerLayout分为侧边菜单和主内容区两部分,侧边菜单可以根据手势展开与隐藏(drawerLayout自身特性),主内容区的内容可以随着菜单的点击而变化(这需要使用者自己实现)。原理原理:添加

程序病毒小队的博客 4212
上一篇: Apache和Django整合
下一篇: setuid,setgid,sticky
itjinks
博客等级 码龄12年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值