前言
Google带来了Android M,同时还有Android支持库的新一轮更新,其中更是增加一个全新的支持库Android Design Support Library,包含了数个重要的Material Design组件,用于将Material Design适配到Android 2.1(API 7)。Design Support Library现在包含:
NavigationView:侧滑菜单
TextInputLayout:动态监听EditText的控件
FloatingActionButton:浮动按钮
Snackbar:类似Toast,是也是弹出一个提示框
TabLayout:导航标签,与ViewPager配合使用最佳,效果要比PagetabStrip
CoordinatorLayout:没用过。。。请参考这个
NagivationView实现侧滑菜单
其实NavigationView自已单个控件是不能实现侧滑菜单的,顶多是个特别点的布局,为了实现侧滑菜单的效果,在这里我将NavigationView与DrawerLayout一起使用。如果要是用Android Studio开发的朋友,也可以在创建Activity的时候直接创建带有抽屉布局的Activity,但是里面代码较多,建议初学者还是自己写,理清下思路。好了下面就来和大家分享下NavigationView的使用步骤:
1.导包(在gradle里面导入当前编译版本下的design包)
compile 'com.android.support:design:25.0.0'
2.写布局
<?xml version="1.0" encoding="utf-8"?><!--根节点 DrawerLayout抽屉布局--> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawaerLayout_main" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- 抽屉隐藏时候的界面布局,可以放碎片,一般也都配合碎片使用--> <RelativeLayout android:id="@+id/rl_layout" android:layout_width="match_parent" android:layout_height="match_parent"></RelativeLayout> <!--NavigationView 侧滑菜单的页面 app:itemTextColor="#fff" 侧滑菜单里面的menu的文字颜色 app:headerLayout="" 侧滑菜单的头布局 app:menu="@menu/menu_main" 侧滑菜单里面的menu布局 --> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="left" android:background="#4876FF" app:itemTextColor="#fff" app:menu="@menu/menu_main" /> </android.support.v4.widget.DrawerLayout>
3.Activity页面Java代码
public class MainActivity extends AppCompatActivity { /** * ActionBarDrawerToggle 是 DrawerLayout.DrawerListener实现。 * 和 NavigationView 搭配使用,推荐用这个方法,符合Android design规范。 * 作用: * 1.改变android.R.id.home返回图标。 * 2.Drawer拉出、隐藏,带有android.R.id.home动画效果。 * 3.监听Drawer拉出、隐藏; */ private ActionBarDrawerToggle toggle; private Context mContext = this; //抽屉布局 private DrawerLayout mDrawerLayout; //侧滑菜单 private NavigationView mNavigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化视图 initView(); } private void initView() { //初始化控件 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawaerLayout_main); mNavigationView = (NavigationView) findViewById(R.id.navigation_view); //为侧滑菜单里面的menu设置监听 mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); switch (item.getItemId()) { case R.id.action_base64: transaction.replace(R.id.rl_layout, new Base64Fragment()); break; case R.id.action_URLDecode: transaction.replace(R.id.rl_layout, new UrlCodeFragment()); break; case R.id.action_MD5: transaction.replace(R.id.rl_layout, new MD5fragment()); break; case R.id.action_aes: transaction.replace(R.id.rl_layout, new AesFragment()); break; } transaction.commit(); if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) { mDrawerLayout.closeDrawer(Gravity.LEFT); } return true; } }); //设置ActionBar可用 getSupportActionBar().setDisplayHomeAsUpEnabled(true); //初始化ActionBarDrawerToggle toggle = new ActionBarDrawerToggle((Activity) mContext, mDrawerLayout, R.string.open_draw, R.string.close_draw); toggle.syncState(); //为DrawerLayout添加监听 mDrawerLayout.addDrawerListener(toggle); } @Override public boolean onOptionsItemSelected(MenuItem item) { // toggle.onOptionsItemSelected(item) 设置带有动画菜单的按钮可用 return toggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); } }实现效果
这是主页面,也就是抽屉隐藏的时候,这时,点击左上方系统自动生成的菜单按钮或者从左向右滑动页面
可以看到菜单按钮的图案已经变了,其实中间还有动画效果,截图就没法展示了,
总结
其实NavigationView使用起来也是挺方便的,代码不算复杂,与DrawerLayout代培使用效果还很炫,这里还没运用ToolBar,所以后面我还会在写一个Demo配合Toolbar使用,也会再写用SlidingMenu实现侧滑菜单的Demo,谢谢浏览博文。如果代码部分有不理解的请留言,希望对刚接触NavigationView的你有所帮助。