国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android中DrawerLayout實現側滑菜單效果

2019-12-12 01:48:26
字體:
來源:轉載
供稿:網友

眾所周知,android里面我們很熟悉的一個功能,側滑菜單效果在以前我們大部分都是用的slidingmenu這個開源框架,自從谷歌官方新出的一個DrawerLayout控件之后,越來越多的應用開始使用谷歌的官方的控件寫這個效果了。
話不多說,先來發(fā)圖以表我滴誠意:

開始寫代碼

DrawerLayout 是v4包里面的,所以項目里面需要添加v4包,具體怎么添加就不多說了,
NavigationView需要在build.gradle里面添加compile ‘com.android.support:design:25.1.0'

activity_main.xml

<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/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <!-- 右邊視圖 --> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- 左邊菜單 --> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /></android.support.v4.widget.DrawerLayout>

然后在res文件夾里面添加一個menu菜單文件夾,已經添加的就不用添加了

上面的代碼里面NavigationView里面有個 app:menu=”@menu/activity_main_drawer”對應如下:
添加一個菜單文件,名字隨意,我的是activity_main_drawer.xml

activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item  android:id="@+id/nav_camera"  android:icon="@drawable/ic_menu_camera"  android:title="第一行" /> <item  android:id="@+id/nav_gallery"  android:icon="@drawable/ic_menu_gallery"  android:title="第二行" /> <item  android:id="@+id/nav_slideshow"  android:icon="@drawable/ic_menu_slideshow"  android:title="第三行" /> <item  android:id="@+id/nav_manage"  android:icon="@drawable/ic_menu_manage"  android:title="第四行" /> </group> <item android:title="Communicate"> <menu>  <item  android:id="@+id/nav_share"  android:icon="@drawable/ic_menu_share"  android:title="第五行" />  <item  android:id="@+id/nav_send"  android:icon="@drawable/ic_menu_send"  android:title="第六行" /> </menu> </item></menu>

再添加一個布局

上面的代碼里面app:headerLayout=”@layout/nav_header_main”對應如下:
添加一個布局,名字是nav_header_main.xml

nav_header_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height" android:background="@drawable/side_nav_bar" android:gravity="bottom" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" app:srcCompat="@android:drawable/sym_def_app_icon" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="@dimen/nav_header_vertical_spacing" android:text="哈哈哈" android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="123456789@qq.com" /></LinearLayout>

MainActivity:

public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { private LinearLayout right; private NavigationView left; private boolean isDrawer=false; private DrawerLayout drawer; @Override public int getLayoutId() { return R.layout.activity_main; } @Override public void initPresenter() { } @Override public void initView() { drawer = (DrawerLayout) findViewById(R.id.drawer_layout); right = (LinearLayout) findViewById(R.id.right); left = (NavigationView) findViewById(R.id.nav_view); NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); right.setOnTouchListener(new View.OnTouchListener() {  @Override  public boolean onTouch(View view, MotionEvent motionEvent) {  if(isDrawer){   return left.dispatchTouchEvent(motionEvent);  }else{   return false;  }  } }); drawer.setDrawerListener(new DrawerLayout.DrawerListener() {  @Override  public void onDrawerSlide(View drawerView, float slideOffset) {  isDrawer=true;  //獲取屏幕的寬高  WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  Display display = manager.getDefaultDisplay();  //設置右面的布局位置 根據左面菜單的right作為右面布局的left 左面的right+屏幕的寬度(或者right的寬度這里是相等的)為右面布局的right  right.layout(left.getRight(), 0, left.getRight() + display.getWidth(), display.getHeight());  }  @Override  public void onDrawerOpened(View drawerView) {}  @Override  public void onDrawerClosed(View drawerView) {  isDrawer=false;  }  @Override  public void onDrawerStateChanged(int newState) {} }); } @Override public void onBackPressed() { if (drawer.isDrawerOpen(GravityCompat.START)) {  drawer.closeDrawer(GravityCompat.START); } else {  super.onBackPressed(); } } @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_camera) {  // Handle the camera action } else if (id == R.id.nav_gallery) { } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }

drawer.openDrawer(GravityCompat.START);//打開滑動菜單

drawer.closeDrawer(GravityCompat.START);//關閉滑動菜單

drawer.isDrawerOpen(GravityCompat.START);//判斷滑動菜單是否打開

具體源碼demo下載地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘泉县| 和静县| 巩义市| 固始县| 大同县| 全州县| 靖安县| 静安区| 闽清县| 双峰县| 武穴市| 乌兰浩特市| 禄丰县| 新沂市| 昭觉县| 荔波县| 防城港市| 全州县| 卓资县| 松桃| 根河市| 舒城县| 疏附县| 西乌珠穆沁旗| 读书| 长治县| 佛学| 博爱县| 资阳市| 武强县| 德化县| 沙河市| 汶川县| 高青县| 大渡口区| 灵璧县| 六盘水市| 全州县| 宿迁市| 广德县| 乐安县|