Android笔记:DrawerLayout抽屉布局的使用
2023-09-14 09:11:44 时间
DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn。。
如下示,只要从屏幕侧边滑一下,或者点击左上角的图标,抽屉就会出来。
DrawerLayout要点:
1.使用DrawerLayout时,在xml布局中,把主界面的布局内容放在前面,后面才放上抽屉里的布局内容
2.记得为抽屉内的布局加上android:layout_gravity="left"或"start",指明抽屉出现在哪一侧。
代码如下所示:
activity_drawer.xml
<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.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" > <!-- 主界面的布局,必须放在抽屉的前面 --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 抽屉的内容 --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="#ffffff" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="1dp" /> </android.support.v4.widget.DrawerLayout> </RelativeLayout>
values/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">DrawerLayoutTest</string> <string name="action_settings">Settings</string> <string name="drawer_close">关闭抽屉</string> <string name="drawer_open">打开抽屉</string> <string-array name="planets_array"> <item>主页</item> <item>发现</item> <item>收藏</item> <item>设置</item> <item>草稿</item> <item>历史</item> <item>模式</item> </string-array> </resources>
DrawerLayoutDemo.java
package com.example.drawerlayouttest; import android.os.Bundle; import android.app.Activity; import android.content.res.Configuration; import android.graphics.Color; 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 DrawerLayoutDemo extends Activity { private String[] mPlanetTitles; private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private ListView mDrawerList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_drawer); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // 初始化ListView initListView(); //添加抽屉开关 mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { //抽屉关闭 public void onDrawerClosed(View view) { invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } //抽屉打开 public void onDrawerOpened(View drawerView) { invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); // enable ActionBar app icon to behave as action to toggle nav drawer getActionBar().setDisplayHomeAsUpEnabled(true); // getActionBar().setHomeButtonEnabled(true); } private void initListView() { mDrawerList = (ListView) findViewById(R.id.left_drawer); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPlanetTitles)); // 设置监听事件 mDrawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { mDrawerList.setItemChecked(position, true); setTitle(mPlanetTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } }); } //Activity运行后的回调 @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } //配置改变时,不用重新启动Activity @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } //设置选项菜单 @Override public boolean onOptionsItemSelected(MenuItem item) { // Pass the event to ActionBarDrawerToggle, if it returns // true, then it has handled the app icon touch event if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } }
抽屉开关的图标:
代码运行后,打开抽屉,效果如图:
相关文章
- Android开发之ImageView ScaleType属性
- Android应用开发架构概述
- Android Studio实用插件使用
- 转--Android学习笔记-实用代码合集
- Android内存性能优化(内部资料总结)
- 【Android】android studio ndk使用例子
- Android开发学习笔记(七)表格布局TableLayout
- Android开发学习笔记(五)帧布局FrameLayout
- Android程序性能优化——ANR、卡顿优化、内存优化、耗电优化、APK大小优化以及启动速度和实战项目
- Android问题笔记 - 使用SDK33导致xml布局代码没有任何提示了
- Android【报错】This class should be public (android.support.v7.internal.widget.ActionBarView.HomeView)
- 【Android笔记57】Android之实现应用程序启动页、引导页功能
- 【Android笔记44】Android利用DrawerLayout布局组件实现侧滑导航菜单的效果
- android 进程和线程的区别
- Ubuntu虚拟机+ROS+Android开发环境配置笔记
- 【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑦ ( 登录 Maven 私服 | Maven 私服初始化设置 | 创建 Maven 仓库 )
- 2014 android毕设代做 代做Android毕设 安卓毕设
- Android之——经常使用手机号码功能
- Android相关属性的介绍:android:exported = true
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- Android学习笔记 - 并行计算框架Renderscript