如果以前用AndroidSideMenu来实现抽屉式的侧滑菜单的话,现在可以使用官方的这个DrawerLayout布局来代替了。
这个DrawerLayout目前包含在v4版的扩展库中,使用很方便。
效果如下 :
初始时菜单是隐藏的
当手指从左向右滑动时,菜单就会跟着滑出,或点击例子中的按纽也会显示出来。
1. 布局文件
activity_drawerlayout.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.widget.DrawerLayout 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" > <!-- 单击按键显示菜单 --> <Button android:id="@+id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示菜单" /> </FrameLayout> <!-- 左侧导航菜单内容 --> <ListView android:id="@+id/left_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="#9400D3" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </android.support.v4.widget.DrawerLayout> </RelativeLayout>
布局中是有规则的,这个要注意。
在标签DrawerLayout中,首先要包含一个FrameLayout布局且是第一个布局元素,用于显示默认要显示的布局。 在FrameLayout布局的下方,则是显示在菜单中的控件或布局。 本例中放了一个ListView控件。同时,在例子上放的ListView标签中可以看到有一个 android:layout_gravity="start" 属性设置,这个是要特别注意的。如果没有
它。则运行时,菜单会显示在最上层,覆盖掉你默认要显示的东西。
2.实现代码:
public class DrawerLayoutActivity extends Activity { private DrawerLayout mDrawerLayout = null; private ListView mDrawerList = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //标题栏浮在窗口上 //getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.activity_drawerlayout); this.setTitle("侧滑菜单导航演示"); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); Button button = (Button) findViewById(R.id.btn); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 按钮按下,将抽屉打开 mDrawerLayout.openDrawer(Gravity.LEFT); } }); initListView(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private void initListView() { mDrawerList = (ListView) findViewById(R.id.left_drawer); mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData())); // Set the list's click listener mDrawerList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //响应事件 } }); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("菜单1"); data.add("菜单2"); data.add("菜单3"); data.add("菜单4"); return data; } }
MAIL:xcl_168@aliyun.com
我的CSDN BLOG: http://blog.csdn.net/xcl168