博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android侧滑菜单DrawerLayout使用
阅读量:5875 次
发布时间:2019-06-19

本文共 4421 字,大约阅读时间需要 14 分钟。

关于侧滑菜单,网上也有很多方案,最多的应该就是使用Android的开源库,而本文主要Android自带的侧滑菜单控件DrawerLayout

Android自带的侧滑菜单,也就是再v4包下DrawerLayout控件。该控件简单易用,先看下实现的效果图。

左菜单:

右菜单:

使用DrawerLayout可以实现左右侧滑菜单,接下来就是代码实现。

布局文件:

复制代码

布局使用android.support.v4.widget.DrawerLayout作为根view,包含三个部分:内容,左菜单,右菜单。DrawerLayout布局最好是先布局内容,然后布局菜单,否则可能出现效果不对。 关于菜单布局,左菜单布局使用android:layout_gravity="start"标志,而右菜单使用android:layout_gravity="end"标志,内容不需要使用标志。

Actviity文件:

public class DrawerLayoutActivity extends AppCompatActivity {    private TextView mTextView;    private ListView mListView;    private ListAdapter mAdapter;    private List
data = new ArrayList<>(); private DrawerLayout mDrawerLayout; private LinearLayout mLeftMenu; private LinearLayout mRightMenu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_draw_layout); for (int i = 0; i < 20; i++) { String text = "drawerLayoutItem--->"+i; data.add(text); } mDrawerLayout = (DrawerLayout)this.findViewById(R.id.toolbar); mTextView = (TextView)this.findViewById(R.id.content_tx); mListView = (ListView)this.findViewById(R.id.draw_list); mLeftMenu = (LinearLayout)this.findViewById(R.id.left); mRightMenu = (LinearLayout)this.findViewById(R.id.right); mAdapter = new ListAdapter(DrawerLayoutActivity.this,data); mListView.setAdapter(mAdapter); View view = (View) LayoutInflater.from(this).inflate(R.layout.headerlayout,null); mListView.addHeaderView(view);// mDrawerLayout.setDrawerListener//已弃用 mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { Log.i("tag","---------->"+slideOffset); // 滑动的过程当中不断地回调 slideOffset:0~1 View content = mDrawerLayout.getChildAt(0); View menu = drawerView; float offset = 1-slideOffset;//1~0 if (drawerView == mLeftMenu){ content.setTranslationX(menu.getMeasuredWidth()*(1-offset));//0~width }else{ content.setTranslationX(-(menu.getMeasuredWidth()*(1-offset)));//0~width } } @Override public void onDrawerOpened(View drawerView) { } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerStateChanged(int newState) { } });// mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
// @Override// public void onItemClick(AdapterView
parent, View view, int position, long id) {
// mDrawerLayout.closeDrawers();// mTextView.setText(data.get(position));//// }// }); mAdapter.setOnItemOnclickListener(new ListAdapter.OnItemOnclickListener() { @Override public void onClike(String text) { mDrawerLayout.closeDrawers(); mTextView.setText(text); } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && mDrawerLayout.isDrawerOpen(mDrawerLayout.getChildAt(1))) { //按下的如果是BACK,同时没有重复 mDrawerLayout.closeDrawers(); return true; } return super.onKeyDown(keyCode, event); }// @Override// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0 && !mDrawerLayout.isDrawerOpen(mDrawerLayout.getChildAt(1))) { //按下的如果是BACK,同时没有重复// mDrawerLayout.openDrawer(mDrawerLayout.getChildAt(1));// return true;// }// return super.onKeyDown(keyCode, event);// }}复制代码

初始化,关于菜单google推荐使用NavigationView控件,使用NavigationViewDrawerLayout配套使用更友好。 这里最重要的一点就是使用DrawerLayout.DrawerListener()设置监听,监听的onDrawerSlide方法,可以监听到滑动的距离0-1的变化,利用这个数据,我们可以做一些实现滑动效果,比如qq菜单的滑动效果。 旧版本设置监听的方法是:mDrawerLayout.setDrawerListener,现在google的api已经不推荐使用了,推荐通过mDrawerLayout.addDrawerListener方法设置监听。

关于DrawerLayout更多的使用方法,可以查看源码或者api。

转载地址:http://bckix.baihongyu.com/

你可能感兴趣的文章
cisco 多生成树MST笔记
查看>>
FPGA设计——图像处理(锐化增强)
查看>>
LINUX REDHAT第十三单元练习题
查看>>
Play Framework
查看>>
集合转数组注意
查看>>
gng3使用方法,正确的路由器防火墙安全配置方式
查看>>
基于域名虚拟主机及主站迁移
查看>>
linux sed
查看>>
elk之elasticsearch 入门
查看>>
C++11 thread
查看>>
云:虚拟之上的管理平台
查看>>
石墨烯+新能源:光伏领域应用潜力巨大
查看>>
本节书摘来自华章出版社《 自动化测试最佳实践:来自全球的经典自动化测试案例解析 》一 2.2 测试中的软件...
查看>>
2022 年 AI 会发展成什么样子,IBM 做出了 5 大预测
查看>>
深入NLP———看中文分词如何影响你的生活点滴 | 硬创公开课
查看>>
老叶观点:MySQL开发规范之我见
查看>>
阿里云重磅推出物联网安全运营中心Link SOC
查看>>
CDN WAF功能开放公测 提升网络应用安全性能
查看>>
oracle学习笔记-第一篇
查看>>
redis演练(2) 最全redis命令列表
查看>>