如何在Android中实现Navigation Drawer

基本上从现在开始之后的Android Studio都会在创建项目的并选择第一个Activity时可以选择带有Navigation Drawer的Acitivity,然而,对于和我一样的新手可能对于读懂NaviDrawer的实现非常困难,因此有一些要点要记下来防止自己忘记。


在Android 官方文档中可以获得不少信息,然而官方文档中的例子与实际由AS创建的NaviDrawer并不符,因此先从官方文档入手。

网址:http://developer.android.com/training/implementing-navigation/nav-drawer.html


1.创建一个新的Drawerlayout的xml文件

它可以是你的main.xml(正如我试图做的那样)


<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">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#ffa2a2a2"/>
</android.support.v4.widget.DrawerLayout>
要留意的地方是

android:layout_gravity="start"
控制的是Drawer从左边拉出而不是右边。

android:layout_width="240dp"
控制的是Drawer的宽度,可以自己调节。


2.初始化DrawerList

根据官方文档以及《Android UI Fundamentals》(by Jason Ostrander)关于ListView的描述,

这一步骤的逻辑应当是这样的。

a.首先你有一个字符串数组String array并放置在/res文件夹下(我在这里用的是/res/values/array.xml)

array.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>厦门市</item>
        <item>福州市</item>
        <item>泉州市</item>
        <item>漳州市</item>
        <item>龙岩市</item>        
    </string-array>
</resources> 
这个数组是将来填充到Drawer中的字符串数组。

b.仅仅有可以用来填充的字符串是不够的,系统还将需要更多信息去将字符串以何种形式填充DrawerList,因此需要在layout文件夹下创建一个drawer_list_item.xml,而对于最终形成的DrawerLayout,每一行调用drawer_list_item.xml中的布局,因此这个xml必须够简单,

我的drawer_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    />

c.在java中注册以上内容

接下来这段就不难理解了,取自官方文档

public class MainActivity extends Activity {
    private String[] mPlanetTitles;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPlanetTitles = getResources().getStringArray(R.array.planets_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // Set the adapter for the list view
        mDrawerList.setAdapter(new ArrayAdapter<String>(this,
                R.layout.drawer_list_item, mPlanetTitles));
        // Set the list's click listener
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        ...
    }
}

其中

mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
是自己需要定义的


(未完待续)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值