Android中侧滑菜单的实现
之前一直没有写侧滑菜单的实现方法,今天计划补上。手机开发中,往往存在很多功能没处放的问题。我们可能会把功能放入一个菜单列表,但现在一种流行的做法是侧滑菜单。侧滑菜单的做法其实是多种多样的,这里介绍一种我们常用的方法,也是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中侧滑菜单的实现相关推荐
- android让组件贴着顶部,Android中底部菜单被输入法顶上去的解决方案
安卓手机输入法弹出,消失会触发 window.onresize事件,我们一般的解决方法是获取焦点,底部隐藏,失去焦点,底部菜单出现,但是,有些人会点击这个按钮收起键牌 那么,这个时候你的失去焦点无效, ...
- android drawerlayout侧滑菜单,Android中drawerlayout侧滑菜单效果的实现
众所周知,Android中drawerlayout侧滑菜单是一个很常见的功能,而我们大多数人都是使用slidengmenu作为一个开源框架,下面爱站技术频道小编给大家介绍Android中drawerl ...
- android 点击侧滑代码,代码分析Android实现侧滑菜单
Android 侧滑菜单的实现,参考网上的代码,实现侧滑菜单.最重要的是这个动画类UgcAnimations,如何使用动画类来侧滑的封装FlipperLayout. 1.实现效果 2.动画类UgcAn ...
- android自定义侧滑菜单代码,原生Android 侧滑菜单实践(部分)
此为第一个制作侧滑菜单的实践 . 此部分仅仅为部分实践: 仅缺menu的字符串布局,以及需要修改的MainActivity.java文件,也是需要主要修改的地方. 从使用MD设计-进行侧滑菜单的制作( ...
- android中menu菜单扩增_【已解决】Android添加Menu菜单
[背景] 想要在Android中添加Menu菜单. 目前已经有了menu的xml定义了: /res/menu/activity_main.xml android:id="@+id/menu_ ...
- android自定义侧滑菜单slidmenu
实现上主要就是一个自定义的MySlidView,在这个MySlidView里边去加载两个你要显示的View(mMenuView, mSlidView),即一个是滑动之后,左侧的mSlidView,另一 ...
- android中menu菜单扩增_在Android中的工具栏中添加菜单
菜单对于将多个动作放入其中非常有用,尤其是那些使用频率较低并且不需要自己的按钮的动作. 菜单显示在Android的工具栏上. 通常使用支持工具栏,但如果没有相应的类库,下面的方法也可以实现. 1.制作 ...
- android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)
首先区分一下什么是选项菜单,什么是快捷菜单. 选项菜单是针对整个页面布局的,在这个页面布局的右上方 ,点击之后可以会展开选项,供大家选择. 快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之 ...
- android 抽屉式侧滑菜单
1.导第三方jar包 nineoldandroids 2. 在onscrollchanged方法里面填入这几句代码 protected void onScrollChanged(int l, int ...
- Android 中选项菜单(Option menu)的用法
博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,
最新文章
- putty秘钥验证登录和xshell秘钥验证登录
- 在线编译工具 Jenkins Hudson 的关系
- mapreduce编程实例python-Python编写MapReduce作业的简单示例
- 线程同步辅助类CyclicBarrier
- boost::mp11::mp_all相关用法的测试程序
- 一款 0 门槛轻松易上手的数据可视化工具
- 基于PYNQ-Z2实现BNN硬件加速
- Codeforces Round #636 (Div. 3)(ABC)
- 输入一个数,判断他是不是质数
- l和l_L&T的完整形式是什么?
- C++ rand,srand用法
- 冲浪科技获Ventech China数百万美元天使轮融资,发力自动驾驶行业
- (转)基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理...
- 2016年统计用区划代码和城乡划分代码(截止2016年07月31日) 省市县镇+url
- 矛与盾:黑客攻防命令大曝光
- Mac添加中国法定节假日安排
- Linux rar 压缩 解压文件
- sqlite3中,blob字段的读取和写入
- win10家庭版系统 修改docker为国内镜像
- 选取一段代码块一下子都回退或前进空一格的快捷键