Android 抽屉布局

  目前部分APP使用一种类似抽屉式的布局,像QQ那种,感觉很炫,自己也一直想做一个像那样的布局,(ps网上很多这样的例子,我下面做的就是参考网上的改变的)

  废话不就不说了,直接上代码

  1、首先建立一个布局文件activity_drawer.xml 

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".DrawerActivity">
10     <android.support.v4.widget.DrawerLayout<!--重点在这里-->
11         android:id="@+id/drawer_layout"
12         android:layout_width="match_parent"
13         android:layout_height="match_parent">
14             <FrameLayout
15                 android:id="@+id/content_frame"
16                 android:layout_width="match_parent"
17                 android:layout_height="match_parent">
18                 <Button
19                     android:id="@+id/btn"
20                     android:layout_width="wrap_content"
21                     android:layout_height="wrap_content"
22                     android:text="打开"
23                     android:layout_alignParentTop="true"
24                     android:layout_alignParentLeft="true"
25                     android:layout_alignParentStart="true"
26                     android:layout_alignParentRight="true"
27                     android:layout_alignParentEnd="true" />
28             </FrameLayout>
29             <ListView
30                 android:id="@+id/left_drawer"
31                 android:layout_width="200dp"
32                 android:layout_height="match_parent"
33                 android:layout_gravity="start"
34                 android:background="#ff349710"
35                 android:choiceMode="singleChoice"
36                 android:dividerHeight="0dp"
37                 android:layout_marginTop="30dp"
38                />
39     </android.support.v4.widget.DrawerLayout>
40 </RelativeLayout>

  2.对应的Activity文件DrawerActivity.java

 1 public class DrawerActivity extends Activity {
 2     public static final String[] str = new String[]{"东部", "西部", "南部", "北部", "中部",
 3             "东南部", "西北部", "西南部", "东北部", "中西部", "中南部", "中北部"};
 4     private DrawerLayout mDrawerLayout = null;
 5     private ListView mlistView;
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_drawer);
10 
11         mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
12         mlistView = (ListView) findViewById(R.id.left_drawer);
13 
14         
15         //下面两种方式都可以,后者要多建立一个value的array文件
16         mlistView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str));
17         //mlistView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getResources().getStringArray(R.array.planets_array)));
18         Button button = (Button) findViewById(R.id.btn);
19         button.setOnClickListener(new View.OnClickListener() {
20 
21             @Override
22             public void onClick(View v) {
23                 // 按钮按下,将抽屉打开
24                 mDrawerLayout.openDrawer(Gravity.LEFT);
25                 //mDrawerLayout.closeDrawers();//可以不监听,默认点击其他地方即可关闭
26                 //adapter.notifyDataSetChanged();
27             }
28         });
29         //列表控件监听
30         mlistView.setOnItemClickListener(new DrawerItemClickListener());
31     }
32 
33     private class DrawerItemClickListener implements ListView.OnItemClickListener {
34         @Override
35         public void onItemClick(AdapterView parent, View view, int position, long id) {
36             selectItem(position);
37         }
38     }
39     //简单输出一些信息
40     private void selectItem(int position) {
41         new AlertDialog.Builder(this)
42                 .setTitle("打开")
43                 .setMessage("打开的位置是:"+position+"
位置的值是:"+str[position])
44                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
45                     @Override
46                     public void onClick(DialogInterface dialogInterface, int i) {
47                     //监听事件
48                     }
49                 }).show();
50     }
51 }

  3.简单效果如下:

  这仅仅是实现了效果,关于为什么待我研究透彻了再分享。

原文地址:https://www.cnblogs.com/hais/p/4710212.html