Android Material Design 之滑动菜单(之DrawerLayout控件及其导航按钮HomeAsUp)

!!!!注意,此文章是基于这篇文章的代码,继续修改的:(Android Material Design 之ToolBar控件)

Material Design简单介绍:

Material Design是Google推出的一套界面设计语言,用于解决Android平台界面风格统一的问题。

滑动菜单:

就是将一些菜单选项影藏起来,而不是放在主屏幕,然后通过滑动的方式将菜单显示出来。

就是QQ侧面,滑出的菜单

不过这个滑动自己实现确实复杂,不过Google提供了DrawerLayout,可以方便实现。

DrawerLayout基本用法:

DrawerLayout是布局,可以放入两个直接子控件:一个是主屏幕显示的内容,一个是滑动菜单显示的内容。

修改布局文件的布局为DrawerLayout:



    
        
        
    
    
    
       

●第一个直接子控件是里面嵌套了一个Toolbar(Android Material Design 之ToolBar控件),用于显示主屏幕的内容

●第二个直接子控件是,用于显示菜单的内容,第二个直接子控件必须指定android:layout_gravity="start/left/right属性

android:layout_gravity="start":滑动菜单方向跟随系统语言方向(如汉英,左到右,就在左)

android:layout_gravity="left/right":滑动菜单方向在左/右

!!!!!!这两个控件具体是什么不要求,是直接的子控件就是(就是DrawerLayout下只有2个子控件),当然,可以嵌套一些控件到两个直接子控件!!!!!!!!!!!!

Android Material Design 之滑动菜单(之DrawerLayout控件及其导航按钮HomeAsUp)_第1张图片 Caption

(圈住那就是影藏的菜单了,一滑动,就会出来了,运行在手机上就懒得截图了) 

一个简单的滑动菜单栏,就可以了,只是将布局改为DrawerLayout,再添加2个直接子控件

滑动菜单进阶:让用户知道有这个滑动菜单导航按钮(也叫HomeAsUp

刚才的滑动菜单,只有用户滑动侧边才会出现,用户很难知道有这么个菜单。解决的方法之一,就是在第一子控件的Toolbar中最左边添加一个导航按钮(也叫HomeAsUp:点击了这个按钮也会滑出菜单

Activity修改如下:

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /*  将Actionbar改为由Toolbar实现 */
        Toolbar toolbar= findViewById(R.id.toolBar);
        setSupportActionBar(toolbar);   //使用Toolbar代替实现Actionbar

        /*  为滑动菜单,在Toolbar上添加一个按钮HomeAsUp */
        mDrawerLayout=findViewById(R.id.drawer_layout);
        ActionBar actionBar=getSupportActionBar();  //获取actionbar,虽然使用Toolbar代替实现
        if (actionBar!=null){
            actionBar.setDisplayHomeAsUpEnabled(true);  //显示HomeAsUp导航按钮
            actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);//为HomeAsUp导航按钮添加图标
        }
    }

    //加载自定义的布局资源文件toolbar.xml

    public boolean onCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.toolbar,menu);
        return true;
    }

    //重写onOptionsItemSelected(MenuItem item) ,处理各个按钮的点击事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case android.R.id.home:
                mDrawerLayout.openDrawer(GravityCompat.START);  //将滑动菜单显示出来
                break;
            ....

        }
        return true;
    }
}

HomeAsUp的id永远都是android.R.id.home

你可能感兴趣的:(Android入门学习)