DrawerLayout入门

android 侧滑菜单 DrawerLayout

还是别写什么前奏了,直接上干货吧:
首先是布局控件的官方说法
To use a DrawerLayout, position your primary content view as the first child with
* width and height of match_parent and no layout_gravity>.
* Add drawers as child views after the main content view and set the layout_gravity
* appropriately. Drawers commonly use match_parent for height with a fixed width.
先来生硬的翻译一下这段东西:
为了使用DrawerLayout控件,首先你需要将一个主视图布局当作第一个子布局放入DrawerLayout布局内部,然后再次加入作为drawers(也就是侧滑菜单)的布局放置在主视图布局的下方,这个布局需要定义高度为match,加入layout_gravity(目的是设置左划还是右滑),而且切记drawers布局需要写入一个固定的宽度
啰嗦完毕,接下来上干货,开始撸码:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_drawerlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!--主视图 -->
    <LinearLayout
        android:id="@+id/main_base_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical">
        <TextView
            android:textSize="@dimen/textsize80"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="咳咳,你可以把这个当作QQ的界面"/>
    </LinearLayout>
    <!--菜单视图-->
    <LinearLayout
        android:layout_width="@dimen/menu_width"
        android:layout_height="match_parent"
        android:id="@+id/main_base_menu"
        android:orientation="vertical"
        android:layout_gravity="left"></LinearLayout>


</android.support.v4.widget.DrawerLayout>

然后你就会看到这个样子的东西
这里写图片描述
界面上的东西基本大功告成:下面我们来看看一些点击事件的处理

public class MainActivity extends Activity {

    @InjectView(R.id.main_base_layout)
    LinearLayout mainBaseLayout;//主视图界面控件
    @InjectView(R.id.main_base_menu)
    LinearLayout mainBaseMenu;//侧滑菜单布局
    @InjectView(R.id.main_drawerlayout)
    DrawerLayout mainDrawerlayout;//侧滑菜单控件
    private MenuListAdapter menuAdapter;
    private List<String> stringList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
        initMenu();
        setView();
    }

    private void setView() {
        mainDrawerlayout.addDrawerListener(new DrawerLayout.DrawerListener() {
            //滑动状态监听
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                Log.d("MainActivity", "slideOffset:" + slideOffset);
            }

            //打开监听
            @Override
            public void onDrawerOpened(View drawerView) {
            }

            //关闭监听
            @Override
            public void onDrawerClosed(View drawerView) {
            }

            //状态改变监听
            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });
    }

    /**
     * 设置菜单
     */
    private void initMenu() {
        View v = View.inflate(this, R.layout.menu_layout, null);
        v.setLayoutParams(new DrawerLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        mainBaseMenu.addView(v);
        ListView menuList = (ListView) v.findViewById(R.id.menu_layout_listview);
        menuAdapter = new MenuListAdapter(stringList, this);
        menuList.setAdapter(menuAdapter);
        menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //关闭菜单布局,更具内部传参left或者right去判断关闭哪个
                mainDrawerlayout.closeDrawer(Gravity.LEFT);
            }
        });
        initMenuData();
    }

    /**
     * 增加数据
     */
    private void initMenuData() {
        stringList.add("测试1");
        stringList.add("测试2");
        stringList.add("测试3");
        stringList.add("测试4");
        menuAdapter.notifyDataSetChanged();
    }
}

到此为止,DrawerLayout的基本介绍就结束了上面重要节点都有注释,很容易理解,代码就不上传了,如果觉得有用记得好评哦亲。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值