之前一直没有写侧滑菜单的实现方法,今天计划补上。手机开发中,往往存在很多功能没处放的问题。我们可能会把功能放入一个菜单列表,但现在一种流行的做法是侧滑菜单。侧滑菜单的做法其实是多种多样的,这里介绍一种我们常用的方法,也是Android自身为我们提供的,那就是DrawerLayout。

1.DrawerLayout相关API

  • setDrawerShadow:设置主页面的渐变阴影图形。
  • addDrawerListener:添加抽屉面板的拉出监听器。需实现监听器DrawerListener的4个方法。
    onDrawerSlide 抽屉面板滑动时触发
    onDrawerOpened 抽屉面板打开时触发
    onDrawerClosed 抽屉面板关闭时触发
    onDrawerStateChanged 抽屉面板的状态发生变化时触发
  • removeDrawerListener:移除抽屉面板的拉出监听器。
  • closeDrawers:关闭所有抽屉面板
  • openDrawer:打开指定抽屉面板
  • closeDrawer:关闭指定抽屉面板
  • isDrawerOpen:判断指定抽屉面板是否打开

2.DrawerLayout使用示例

activity_main.xml

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/dl_layout"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/btn_drawer_left"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="打开左边侧滑"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_drawer_right"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:text="打开右边侧滑"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><TextViewandroid:id="@+id/tv_drawer_center"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:gravity="top|center"android:paddingTop="30dp"android:text="这里是首页"android:textColor="@color/black"android:textSize="17sp" /></LinearLayout><!-- 这是位于抽屉布局左边的侧滑列表视图,layout_gravity属性设定了它的对齐方式 --><ListViewandroid:id="@+id/lv_drawer_left"android:layout_width="150dp"android:layout_height="match_parent"android:layout_gravity="left"android:background="#ffdd99" /><!-- 这是位于抽屉布局右边的侧滑列表视图,layout_gravity属性设定了它的对齐方式 --><ListViewandroid:id="@+id/lv_drawer_right"android:layout_width="150dp"android:layout_height="match_parent"android:layout_gravity="right"android:background="#99ffdd" />
</androidx.drawerlayout.widget.DrawerLayout>

item_select.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"style="?android:attr/spinnerItemStyle"android:singleLine="true"android:layout_width="match_parent"android:layout_height="50dp"android:ellipsize="marquee"android:gravity="center"android:textAlignment="inherit"android:textSize="17sp"android:textColor="@color/black" />

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private final static String TAG = "DrawerLayoutActivity";private DrawerLayout dl_layout; // 声明一个抽屉布局对象private Button btn_drawer_left;private Button btn_drawer_right;private TextView tv_drawer_center;private ListView lv_drawer_left; // 声明左侧菜单的列表视图对象private ListView lv_drawer_right; // 声明右侧菜单的列表视图对象private String[] titleArray = {"首页", "新闻", "娱乐", "博客", "论坛"}; // 左侧菜单项的标题数组private String[] settingArray = {"我的", "设置", "关于"}; // 右侧菜单项的标题数组@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 从布局文件中获取名叫dl_layout的抽屉布局dl_layout = findViewById(R.id.dl_layout);// 给抽屉布局设置侧滑监听器dl_layout.addDrawerListener(new SlidingListener());btn_drawer_left = findViewById(R.id.btn_drawer_left);btn_drawer_right = findViewById(R.id.btn_drawer_right);tv_drawer_center = findViewById(R.id.tv_drawer_center);btn_drawer_left.setOnClickListener(this);btn_drawer_right.setOnClickListener(this);initListDrawer(); // 初始化侧滑的菜单列表}// 初始化侧滑的菜单列表private void initListDrawer() {// 下面初始化左侧菜单的列表视图lv_drawer_left = findViewById(R.id.lv_drawer_left);ArrayAdapter<String> left_adapter = new ArrayAdapter<String>(this,R.layout.item_select, titleArray);lv_drawer_left.setAdapter(left_adapter);lv_drawer_left.setOnItemClickListener(new LeftListListener());// 下面初始化右侧菜单的列表视图lv_drawer_right = findViewById(R.id.lv_drawer_right);ArrayAdapter<String> right_adapter = new ArrayAdapter<String>(this,R.layout.item_select, settingArray);lv_drawer_right.setAdapter(right_adapter);lv_drawer_right.setOnItemClickListener(new RightListListener());}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_drawer_left) {if (dl_layout.isDrawerOpen(lv_drawer_left)) { // 左侧菜单列表已打开dl_layout.closeDrawer(lv_drawer_left); // 关闭左侧抽屉} else { // 左侧菜单列表未打开dl_layout.openDrawer(lv_drawer_left); // 打开左侧抽屉}} else if (v.getId() == R.id.btn_drawer_right) {if (dl_layout.isDrawerOpen(lv_drawer_right)) { // 右侧菜单列表已打开dl_layout.closeDrawer(lv_drawer_right); // 关闭右侧抽屉} else { // 右侧菜单列表未打开dl_layout.openDrawer(lv_drawer_right); // 打开右侧抽屉}}}// 定义一个左侧菜单列表的点击监听器private class LeftListListener implements AdapterView.OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String text = titleArray[position];tv_drawer_center.setText("这里是" + text + "页面");dl_layout.closeDrawers(); // 关闭所有抽屉}}// 定义一个右侧菜单列表的点击监听器private class RightListListener implements AdapterView.OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {String text = settingArray[position];tv_drawer_center.setText("这里是" + text + "页面");dl_layout.closeDrawers(); // 关闭所有抽屉}}// 定义一个抽屉布局的侧滑监听器private class SlidingListener implements DrawerLayout.DrawerListener {// 在拉出抽屉的过程中触发public void onDrawerSlide(View drawerView, float slideOffset) {}// 在侧滑抽屉打开后触发public void onDrawerOpened(View drawerView) {if (drawerView.getId() == R.id.lv_drawer_left) {btn_drawer_left.setText("关闭左边侧滑");} else {btn_drawer_right.setText("关闭右边侧滑");}}// 在侧滑抽屉关闭后触发public void onDrawerClosed(View drawerView) {if (drawerView.getId() == R.id.lv_drawer_left) {btn_drawer_left.setText("打开左边侧滑");} else {btn_drawer_right.setText("打开右边侧滑");}}// 在侧滑状态变更时触发public void onDrawerStateChanged(int paramInt) {}}
}

Android中侧滑菜单的实现相关推荐

  1. android让组件贴着顶部,Android中底部菜单被输入法顶上去的解决方案

    安卓手机输入法弹出,消失会触发 window.onresize事件,我们一般的解决方法是获取焦点,底部隐藏,失去焦点,底部菜单出现,但是,有些人会点击这个按钮收起键牌 那么,这个时候你的失去焦点无效, ...

  2. android drawerlayout侧滑菜单,Android中drawerlayout侧滑菜单效果的实现

    众所周知,Android中drawerlayout侧滑菜单是一个很常见的功能,而我们大多数人都是使用slidengmenu作为一个开源框架,下面爱站技术频道小编给大家介绍Android中drawerl ...

  3. android 点击侧滑代码,代码分析Android实现侧滑菜单

    Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单.最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装FlipperLayout. 1.实现效果 2.动画类UgcAn ...

  4. android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)

    此为第一个制作侧滑菜单的实践 . 此部分仅仅为部分实践: 仅缺menu的字符串布局,以及需要修改的MainActivity.java文件,也是需要主要修改的地方. 从使用MD设计-进行侧滑菜单的制作( ...

  5. android中menu菜单扩增_【已解决】Android添加Menu菜单

    [背景] 想要在Android中添加Menu菜单. 目前已经有了menu的xml定义了: /res/menu/activity_main.xml android:id="@+id/menu_ ...

  6. android自定义侧滑菜单slidmenu

    实现上主要就是一个自定义的MySlidView,在这个MySlidView里边去加载两个你要显示的View(mMenuView, mSlidView),即一个是滑动之后,左侧的mSlidView,另一 ...

  7. android中menu菜单扩增_在Android中的工具栏中添加菜单

    菜单对于将多个动作放入其中非常有用,尤其是那些使用频率较低并且不需要自己的按钮的动作. 菜单显示在Android的工具栏上. 通常使用支持工具栏,但如果没有相应的类库,下面的方法也可以实现. 1.制作 ...

  8. android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)

    首先区分一下什么是选项菜单,什么是快捷菜单. 选项菜单是针对整个页面布局的,在这个页面布局的右上方 ,点击之后可以会展开选项,供大家选择. 快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之 ...

  9. android 抽屉式侧滑菜单

    1.导第三方jar包 nineoldandroids 2. 在onscrollchanged方法里面填入这几句代码 protected void onScrollChanged(int l, int ...

  10. Android 中选项菜单(Option menu)的用法

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

最新文章

  1. putty秘钥验证登录和xshell秘钥验证登录
  2. 在线编译工具 Jenkins Hudson 的关系
  3. mapreduce编程实例python-Python编写MapReduce作业的简单示例
  4. 线程同步辅助类CyclicBarrier
  5. boost::mp11::mp_all相关用法的测试程序
  6. 一款 0 门槛轻松易上手的数据可视化工具
  7. 基于PYNQ-Z2实现BNN硬件加速
  8. Codeforces Round #636 (Div. 3)(ABC)
  9. 输入一个数,判断他是不是质数
  10. l和l_L&T的完整形式是什么?
  11. C++ rand,srand用法
  12. 冲浪科技获Ventech China数百万美元天使轮融资,发力自动驾驶行业
  13. (转)基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...
  14. 2016年统计用区划代码和城乡划分代码(截止2016年07月31日) 省市县镇+url
  15. 矛与盾:黑客攻防命令大曝光
  16. Mac添加中国法定节假日安排
  17. Linux rar 压缩 解压文件
  18. sqlite3中,blob字段的读取和写入
  19. win10家庭版系统 修改docker为国内镜像
  20. 选取一段代码块一下子都回退或前进空一格的快捷键

热门文章

  1. centos上部署rap2
  2. 14种鼻型图解_十种鼻型分类图解
  3. 维京传奇第四季/全集Vikings迅雷下载
  4. 时间序列-异常检测(Anomaly Detection)(四):深度学习方法
  5. [spark] spark推测式执行
  6. 【题解】P3939数颜色
  7. 安装tensorflow提示Requirement already satisfied,然而无法导入tensorflow
  8. 虫儿飞简谱用计算机,乐曲简谱(虫儿飞简谱)
  9. 20年管理学范围内知识点(潘永明)by:PoilZero
  10. m3u8视频格式转换