当前位置: 首页 > 编程日记 > 正文

Android -- DrawerLayout

抽屉效果的导航菜单                                                                  

1喜欢知乎的都应该装的用知乎日报吧~这里指Android的不是IOS的。知乎日报的导航菜单就是用DrawerLayout实现的。

觉得这种侧滑的抽屉效果的菜单很好。

不用切换到另一个页面,也不用去按菜单的硬件按钮,直接在界面上一个按钮点击,菜单就滑出来,而且感觉能放很多东西。

android-support-v4.jar                                                             

首先, DrawerLayout这个类是在Support Library里的,需要加上android-support-v4.jar这个包。

然后程序中用时在前面导入import android.support.v4.widget.DrawerLayout;

如果找不到这个类,首先用SDK Manager更新一下Android Support Library,然后在Android SDK\extras\android\support\v4路径下找到android-support-v4.jar,复制到项目的libs路径,将其Add to Build Path.

Code                                                                                   

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><android.support.v4.widget.DrawerLayoutxmlns: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 --><!-- main content must be the first element of DrawerLayout because it will be drawn first and drawer must be on top of it --><FrameLayoutandroid:id="@+id/content_frame"android:layout_width="match_parent"android:layout_height="match_parent" /><!-- The navigation drawer --><ListViewandroid:id="@+id/left_drawer"android:layout_width="240dp"android:layout_height="match_parent"android:layout_gravity="left"android:background="#111"android:choiceMode="singleChoice"android:divider="@android:color/transparent"android:dividerHeight="0dp" /></android.support.v4.widget.DrawerLayout></RelativeLayout>

DrawerLayout的第一个子元素是主要内容,即抽屉没有打开时显示的布局。这里采用了一个FrameLayout,里面什么也没放。

DrawerLayout的第二个子元素是抽屉中的内容,即抽屉布局,这里采用了一个ListView。

import android.os.Bundle;
import android.app.Activity;
import android.content.res.Configuration;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;public class HelloDrawerActivity extends Activity
{private String[] mPlanetTitles;private DrawerLayout mDrawerLayout;private ActionBarDrawerToggle mDrawerToggle;private ListView mDrawerList;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_hello_drawer);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);// init the ListView and Adapter, nothing new
        initListView();// set a custom shadow that overlays the main content when the drawer// opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START);mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.drawable.ic_drawer, R.string.drawer_open,R.string.drawer_close){/** Called when a drawer has settled in a completely closed state. */public void onDrawerClosed(View view){invalidateOptionsMenu(); // creates call to// onPrepareOptionsMenu()
            }/** Called when a drawer has settled in a completely open state. */public void onDrawerOpened(View drawerView){invalidateOptionsMenu(); // creates call to// onPrepareOptionsMenu()
            }};// Set the drawer toggle as the DrawerListener
        mDrawerLayout.setDrawerListener(mDrawerToggle);// enable ActionBar app icon to behave as action to toggle nav drawergetActionBar().setDisplayHomeAsUpEnabled(true);// getActionBar().setHomeButtonEnabled(true);// Note: getActionBar() Added in API level 11
    }private void initListView(){mDrawerList = (ListView) findViewById(R.id.left_drawer);mPlanetTitles = getResources().getStringArray(R.array.planets_array);// Set the adapter for the list viewmDrawerList.setAdapter(new ArrayAdapter<String>(this,R.layout.list_item, mPlanetTitles));// Set the list's click listenermDrawerList.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id){// Highlight the selected item, update the title, and close the// drawermDrawerList.setItemChecked(position, true);setTitle(mPlanetTitles[position]);mDrawerLayout.closeDrawer(mDrawerList);}});}@Overrideprotected void onPostCreate(Bundle savedInstanceState){super.onPostCreate(savedInstanceState);// Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();}@Overridepublic void onConfigurationChanged(Configuration newConfig){super.onConfigurationChanged(newConfig);mDrawerToggle.onConfigurationChanged(newConfig);}@Overridepublic boolean onOptionsItemSelected(MenuItem item){// Pass the event to ActionBarDrawerToggle, if it returns// true, then it has handled the app icon touch eventif (mDrawerToggle.onOptionsItemSelected(item)){return true;}// Handle your other action bar items...return super.onOptionsItemSelected(item);}}

例子是从官方实例中扒出来的,比较纠结的是用了Level 11的一个API,这样minSdkVersion就有限制,不能太低。

Or Code                                                                               

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".DrawerActivity" ><android.support.v4.widget.DrawerLayoutandroid:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent" ><!-- The main content view --><FrameLayoutandroid:id="@+id/content_frame"android:layout_width="match_parent"android:layout_height="match_parent" ><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="open" /></FrameLayout><!-- The navigation drawer --><ListViewandroid:id="@+id/left_drawer"android:layout_width="240dp"android:layout_height="match_parent"android:layout_gravity="start"android:background="#111"android:choiceMode="singleChoice"android:divider="@android:color/transparent"android:dividerHeight="0dp" /></android.support.v4.widget.DrawerLayout></RelativeLayout>
public class DrawerActivity extends Activity
{private DrawerLayout mDrawerLayout = null;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_drawer);mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);Button button = (Button) findViewById(R.id.btn);button.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){// 按钮按下,将抽屉打开
                mDrawerLayout.openDrawer(Gravity.LEFT);}});}}

我是天王盖地虎的分割线                                                             

参考:http://www.cnblogs.com/mengdd/p/3213378.html

转载于:https://www.cnblogs.com/yydcdut/p/3952670.html

相关文章:

Socketserver 笔记

引入Socketserver的背景&#xff1a;我们之前使用socket编程的时候&#xff0c;Server端创建一个连接循环&#xff08;建立连接&#xff09;一个通信循环&#xff08;基于一次连接建立通信循环&#xff09;&#xff0c;&#xff08;这里的黏包问题我们的实现方式是&#xff1a;…

Delphi 调用C#编写的WebService 参数为Null解决方法

今天测试.net 2.0的WebService&#xff0c;发现了一个大问题。就是无法获取参数&#xff0c;参数永远是null。当然了使用.net调用 没有任何问题&#xff0c;web测试页也正常。不论是Delphi7还是java调用的结果的都是一样的&#xff0c;难道是.net 2.0的Bug&#xff1f; 测试结…

1025 PAT Ranking

1. 考生的编号是数字字符串&#xff0c;但是没必要转化成整数再比较&#xff0c;可以直接用strcmp() 2. 对整体的排名进行编号时所有信息都已经齐备&#xff0c;可以边编号边输出 3. 需要有些思量的地方是部分编号&#xff0c;当当前学生的分数不等于他上一个该怎么办 4. 真…

C#编写的多生产者多消费者同步问题

// 多个生产者和多个消费者&#xff0c;能生产n个产品的情况using System; using System.Threading;public class HoldIntegerSynchronized{private int[] buffer; //缓冲区private int occupiedBufferCount 0;private int readPosition 0 , writePosition 0;//下一个读到的…

展望2009,回眸2008

2008年真正的过去了&#xff0c;已经感觉不到2008年的存在。 2009年来了&#xff0c;似乎真正的来了。 生活的压力更大了&#xff0c;工作也不太顺利。 希望越来越好&#xff0c;也不知道是不是真的该跳槽了。 待在这里很郁闷。 转载于:https://www.cnblogs.com/tacker/archive…

m_Orchestrate learning system---七、如何快速学好前端

m_Orchestrate learning system---七、如何快速学好前端 一、总结 一句话总结&#xff1a;看视频啊&#xff0c;系统看视频啊 1、如何解决单词数字太长超出边界的问题&#xff1f; word-wrap 把编辑删除都挤跑了 2、amaze ui中a标签和button标签可以互换么&#xff1f; 其实弄上…

1062 Talent and Virtue

1.在结构体里面设置total_grades属性是明智之举&#xff0c;但是不可以在结构体内得到total_gradesvirtue_gradetalent_grade; 2.弄清题意&#xff0c;对人进行分类&#xff0c;等级越高type值越小&#xff0c;但是注意分的类别也许出现交叉的情况&#xff0c;细的要出现在粗的…

用百度直达号获取新用户 让顾客直达商家服务

直达号是什么? 直达号&#xff0c;商家在百度移动平台的官方服务账号。基于移动搜索、账号、地图、个性化推荐等多种方式&#xff0c;让顾客随时随地直达商家服务。 直达号其实就是两个功能&#xff1a;  √ 提供一个手机网站模板&#xff0c;入住商家可以建自己的手机网站。…

【Quartz】实现接口封装化(二)

原文:【Quartz】实现接口封装化&#xff08;二&#xff09;前言 通过昨天的努力终于算是了解Quartz这个定时器的简单使用&#xff0c;为了更深一步的了解和基于以后希望在项目中能使用他。所有我对他做了一下简单的封装操作&#xff0c;便于以后从新建立新工作和触发器&#…

怎么成为优秀的软件模型设计者?

作者&#xff1a;Scott Ambler著&#xff0c;乐林峰 译 本文选自&#xff1a;www.umlchina.com 2002年03月25日 我们期待自己成为一个优秀的软件模型设计者&#xff0c;但是&#xff0c;要怎样做&#xff0c;又从哪里开始呢&#xff1f; 将下列原则应用到你的软件工程中&…

1012 The Best Rank

思路&#xff1a;读入全部的数据之后&#xff0c;按照四个cmp函数对数组进行排序&#xff0c;给每生的4个科目的排名赋值&#xff0c;读入要检验的id后使用strcmp对数组中的id进行遍历(幸好这里数组大小和要检验的数目乘积不超过4万)&#xff0c;如果找到了相同id,调用写好的得…

SDWebImage使用——一个可管理远程图片加载的类库

SDWebImage托管在github上。https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片。具有缓存管理、异步下载、同一个URL下载次数控制和优化等特征。 将SDWebImage类库添加入工程时&#xff0c;一定注意需要添加MapKit.framework&…

EXECL使用技巧(转)

2007-03-18 09:07 一、求字符串中某字符出现的次数&#xff1a; 例&#xff1a;求A1单元格中字符"a"出现的次数&#xff1a; LEN(A1)-LEN(SUBSTITUTE(A1,"a","")) 二、如何在不同工作薄之间复制宏&#xff1a; 1、打开含有宏的工作薄&#xff0c…

微信小程序(canvas)画图保存到本地相册(wepy)

html标签部分 因为这个需要用户授权 所以需要使用button&#xff0c;画布使用的是canvas&#xff0c;这个可以参考小程序官方文档&#xff0c;代码如下 <button classbtn type"default" open-type"getUserInfo" tapexportImg>生成图片保存到本地&l…

1016 Phone Bills

目录 概述&#xff1a; 一些小的注意点 AC代码 概述&#xff1a; 这道题是我迄今做出来的最复杂的一道PAT了&#xff0c;该题被归类到排序专题下&#xff0c;其实还涉及到大量的字符串处理等别的我暂时也说不出的知识点。 排序函数我写了两个&#xff0c;1是cmp&#xff0…

C# GDI+ 简单绘图 (三) 仿浏览器截屏效果

感谢大家的支持,这几天从早忙到晚,一个字累呀!!!现在挺困的,但是又不习惯这么早睡觉,哎~~还是利用这个时间继续来写第三篇吧.  前两篇已经基本向大家介绍了绘图的基本知识.那么,我就用我们上两篇所学的,做几个例子&#xff0e;  我们先来做一个简单的----仿QQ截图,关于这个…

POJ 1236 Network of Schools(tarjan)

Network of SchoolsDescription A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving schools”). Note that if B …

如何设置网页自动刷新(JSP,JS,HTML)

http://blog.163.com/ylx282006126/blog/static/59772717201111685917664/ 转载于:https://www.cnblogs.com/liuzhuqing/p/7480284.html

1084 Broken Keyboard

两个注意的点 1.本题被归到散列专题下&#xff0c;但是由于是逐字符地映射到整形&#xff0c;可以直接把布尔型哈希数组的大小设置为ASCII的数量128&#xff0c;然后直接将字符作为数组下标(如果是字符串&#xff0c;才需要自己写一个哈希函数&#xff0c;将字符串映射到整形&…

Android提示框与通知的使用

1.通知 Android 3.0以前使用的方法 1 NotificationManager nm (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 2 Notification notification new Notification(R.drawable.dss, 3 "通知到了", Syste…

nginx安全日志分析脚本的编写

https://blog.csdn.net/nextdoor6/article/details/51914966

[转]笑死人的考试填空

高考完后又是中考&#xff0c;考题千奇百怪&#xff0c;答卷也五花八门。真佩服现在的学生啊&#xff0c;思维跳脱&#xff0c;天马行空&#xff0c;和我们那时候的循规蹈矩&#xff0c;差别太大了&#xff0c;呵呵。看一组语文试卷中的填空题&#xff1a;1.__________&#xf…

1033 旧键盘打字

1. 非常奇怪&#xff0c;明明都说了用下划线替代空格&#xff0c;但是用scanf读入的时候就会有1个测试点没通过&#xff0c;换成cin.getline就通过了 2.3种情况下对应的哈希表赋值为true。1是上来就赋值&#xff0c;2是对于大写字母把对应小写字母也赋值&#xff0c;这里注意直…

OLE 操作Excel 详解(转)

使用Excel模板进行报表的开发. 今年搞的Excel比较多&#xff0c;总结了一下&#xff0c;相信常用的操作包含的差不多了。 可以首先定义一个无内容的Excel报表模板文件. 通过Tcode SMW0 上传至SAP数据库中备用.(注: Web对象应该选择’WebRFC 应用程序的二进制数据’) 开发程序…

只需3分钟,就能轻松创建 一个SpreadJS的React项目

概述SpreadJS 纯前端表格控件 V11.2(SP2) 已经全面支持了 React 的拓展。接下来我们看下如何利用3分钟快速创建一个 SpreadJS 的 React 项目。1.新建React 项目&#xff08;耗时 1 Min&#xff09;直接运行&#xff1a;npx create-react-app react-spread-sheets还不清楚什么是…

1039 到底买不买

很典型的散列题&#xff0c;对于shop和eva有的珠子(即字符)&#xff0c;各开一个128长度的整形散列表计数&#xff0c;将字符作为下标读入。 然后从0~127进行遍历&#xff0c;看每个下标下两个散列表的数量&#xff0c;如果有shop<eva说明不买&#xff0c;但是遍历仍然要继…

什么是Linq

最近一直利用业余的时间来研究Linq&#xff0c;估计这样的文章在对于园子里很多牛人来说就有点小儿科了&#xff0c;前段时间写了一个Linq To Sql体验的小例子&#xff0c;感觉很简洁程序上操作体验不错&#xff0c;我写这些的文章目的是自我学习笔记的备用和查看&#xff0c;当…

OSS正式支持IPv6公测

背景 6月20日阿里云宣布全面支持IPv6&#xff0c; 随后阿里云开放对象存储OSS也逐步开始向用户公测。 公测步骤 正常使用IPv6服务&#xff0c;除了OSS端支持还需要客户端支持&#xff0c;我们做一些检查证明客户端具备访问 IPv6的能力&#xff0c;再使用OSS SDK或工具通过IPv6 …

C++中定义类的对象:用new和不用new的区别

Point p1; Point *p2new Point(); p1 由系统创建并释放&#xff0c;不用担心会出现内存泄露&#xff0c;但是生命期只有在本区域的大括号内&#xff0c;出了大括号就没用了。 P2 是指针&#xff0c;要自己释放&#xff0c;用不好很危险&#xff0c;用好了功能强大&#xff0c;…

1043 输出PATest

开一个长度为6的整型数组分别记录6个字符的数量&#xff0c;输出的时候条件是数组中至少存在一个不为零的元素 while(PATest[0]||PATest[1]||PATest[2]||PATest[3]||PATest[4]||PATest[5]){//当6个还有一个不为0 AC代码 #include<cstdio> #include<cmath> #inc…