网站首页 博客 Android左侧抽屉菜单+点击事件
1.添加所需依赖
implementation 'com.jakewharton:butterknife:10.1.0' annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0' implementation 'com.github.mamumu:mmDialog:1.3.0' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.squareup.okhttp3:okhttp:4.0.1' implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0' implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.github.bumptech.glide:glide:4.9.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' implementation 'com.jaeger.statusbarutil:library:1.5.1' implementation 'com.ashokvarma.android:bottom-navigation-bar:1.3.0' implementation 'com.google.android.material:material:1.0.0' implementation 'de.hdodenhof:circleimageview:3.0.0' implementation 'com.rxjava.rxhttp:rxhttp:1.1.6' annotationProcessor 'com.rxjava.rxhttp:rxhttp-compiler:1.1.6' implementation 'com.rxjava.rxlife:rxlife:1.0.9'
2.自定义BaseActivity
package com.iefeel.kaoqin; import android.os.Bundle; import android.view.MenuItem; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import com.jaeger.library.StatusBarUtil; import com.mumu.dialog.MMLoading; import com.mumu.dialog.MMToast; import rxhttp.wrapper.annotation.DefaultDomain; public class BaseActivity extends AppCompatActivity { private MMLoading mmLoading; private MMToast mmToast; @DefaultDomain() //设置为默认域名 public static String baseUrl = "http://xuexi.iefeel.com"; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); } protected void setStatusBar() { StatusBarUtil.setColor(this, getResources().getColor(R.color.colorPrimary)); } @Override public boolean onOptionsItems.e.l.e.c.ted(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } return super.onOptionsItems.e.l.e.c.ted(item); } //显示加载中 protected void showLoading() { if (mmLoading == null) { MMLoading.Builder builder = new MMLoading.Builder(this) .setMessage("加载中...") .setCancelable(false) .setCancelOutside(false); mmLoading = builder.create(); }else { mmLoading.dismiss(); MMLoading.Builder builder = new MMLoading.Builder(this) .setMessage("加载中...") .setCancelable(false) .setCancelOutside(false); mmLoading = builder.create(); } mmLoading.show(); } //显示加载中,带文字 protected void showLoading(String msg) { if (mmLoading == null) { MMLoading.Builder builder = new MMLoading.Builder(this) .setMessage(msg) .setCancelable(false) .setCancelOutside(false); mmLoading = builder.create(); }else { mmLoading.dismiss(); MMLoading.Builder builder = new MMLoading.Builder(this) .setMessage(msg) .setCancelable(false) .setCancelOutside(false); mmLoading = builder.create(); } mmLoading.show(); } //隐藏加载中 protected void hideLoading() { if (mmLoading != null && mmLoading.isShowing()) { mmLoading.dismiss(); } } //显示成功提示 protected void showToastSuccess(String msg) { if (mmToast == null) { MMToast.Builder builder=new MMToast.Builder(this) .setMessage(msg) .setSuccess(true); mmToast=builder.create(); }else { mmToast.cancel(); MMToast.Builder builder=new MMToast.Builder(this) .setMessage(msg) .setSuccess(true); mmToast=builder.create(); } mmToast.show(); } //显示失败提示 protected void showToastFailure(String msg) { if (mmToast == null) { MMToast.Builder builder=new MMToast.Builder(this) .setMessage(msg) .setSuccess(false); mmToast=builder.create(); }else { mmToast.cancel(); MMToast.Builder builder=new MMToast.Builder(this) .setMessage(msg) .setSuccess(false); mmToast=builder.create(); } mmToast.show(); } }
3.添加MainActivity
package com.iefeel.kaoqin; import androidx.annotation.NonNull; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.widget.Toolbar; import androidx.drawerlayout.widget.DrawerLayout; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.google.android.material.navigation.NavigationView; import com.jaeger.library.StatusBarUtil; import com.mumu.dialog.MMAlertDialog; public class MainActivity extends BaseActivity { private DrawerLayout mDrawerLayout; private Toolbar mToolbar; private ViewGroup contentLayout; private NavigationView mNavigation; private int mStatusBarColor; private int mAlpha = StatusBarUtil.DEFAULT_STATUS_BAR_ALPHA; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDrawerLayout = findViewById(R.id.drawer_layout); contentLayout = findViewById(R.id.main); mNavigation = findViewById(R.id.navigation); mToolbar = findViewById(R.id.toolbar); setSupportActionBar(mToolbar); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); mDrawerLayout.addDrawerListener(toggle); toggle.syncState(); mNavigation.setNavigationItems.e.l.e.c.tedListener(new NavigationView.OnNavigationItems.e.l.e.c.tedListener() { @Override public boolean onNavigationItems.e.l.e.c.ted(@NonNull MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.nav_camera: MMAlertDialog.showDialog(MainActivity.this, "系统提示", "点击了Camera", null, "确定", false, null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); break; case R.id.nav_gallery: MMAlertDialog.showDialog(MainActivity.this, "系统提示", "点击了Gallery", null, "确定", false, null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); break; default: MMAlertDialog.showDialog(MainActivity.this, "系统提示", "点击了导航栏菜单" + menuItem.getTitle(), null, "确定", false, null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); break; } return false; } }); } @Override protected void setStatusBar() { mStatusBarColor = getResources().getColor(R.color.colorPrimary); StatusBarUtil.setColorForDrawerLayout(this, findViewById(R.id.drawer_layout), mStatusBarColor, mAlpha); } //创建菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); return true; } //菜单点击事件 @Override public boolean onOptionsItems.e.l.e.c.ted(MenuItem item) { switch (item.getItemId()){ case R.id.btn_about_us: String version = getVersionName(this); MMAlertDialog.showDialog(MainActivity.this, getString(R.string.app_name), "当前版本:" + version, null, "确定", false, null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); break; case R.id.btn_scan_some: MMAlertDialog.showDialog(MainActivity.this, "系统提示", "开发中,敬请期待", null, "确定", false, null, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); break; case R.id.btn_close_app: finish(); break; } return true; } //获取版本名 public static String getVersionName(Context context) { return getPackageInfo(context).versionName; } //获取版本号 public static int getVersionCode(Context context) { return getPackageInfo(context).versionCode; } //通过PackageInfo得到的想要启动的应用的包名 private static PackageInfo getPackageInfo(Context context) { PackageInfo pInfo = null; try { //通过PackageManager可以得到PackageInfo PackageManager pManager = context.getPackageManager(); pInfo = pManager.getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS); return pInfo; } catch (Exception e) { e.printStackTrace(); } return pInfo; } }
4.添加布局文件res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:fitsSystemWindows="true"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> <TextView android:id="@+id/txtv_hello" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAllCaps="false" android:text="Hello World" android:textAlignment="center"/> </LinearLayout> </FrameLayout> <com.google.android.material.navigation.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/white" app:headerLayout="@layout/nav_header" app:menu="@menu/activity_main_drawer"/> </androidx.drawerlayout.widget.DrawerLayout>
5.添加抽屉头部res/layout/nav_header.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="192dp" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/nav_header_bg" android:scaleType="centerCrop"/> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/profile_image" android:layout_width="96dp" android:layout_height="96dp" android:layout_gravity="center" android:layout_marginBottom="10dp" android:src="@drawable/ic_profile"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_marginBottom="24dp" android:padding="10dp" android:textAlignment="center" android:text="@string/nav_title" android:textColor="@android:color/white"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:padding="10dp" android:textAlignment="center" android:text="@string/nav_subtitle" android:textColor="@android:color/white" android:textSize="12sp"/> </FrameLayout>
6.添加抽屉主体res/menu/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="Camera"/> <item android:id="@+id/nav_gallery" android:icon="@drawable/ic_menu_gallery" android:title="Gallery"/> <item android:id="@+id/nav_slideshow" android:icon="@drawable/ic_menu_slideshow" android:title="Slideshow"/> <item android:id="@+id/nav_manage" android:icon="@drawable/ic_menu_manage" android:title="Tools"/> </group> <item android:title="Communicate"> <menu> <item android:id="@+id/nav_share" android:icon="@drawable/ic_menu_share" android:title="Share"/> <item android:id="@+id/nav_send" android:icon="@drawable/ic_menu_send" android:title="Send"/> </menu> </item> <item android:title="Communicate2"> <menu> <item android:id="@+id/nav_share_two" android:icon="@drawable/ic_menu_share" android:title="Share2"/> <item android:id="@+id/nav_send_two" android:icon="@drawable/ic_menu_send" android:title="Send2"/> </menu> </item> </menu>
7.添加右上角菜单res/menu/main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/btn_about_us" android:title="@string/about_us_text"/> <item android:id="@+id/btn_scan_some" android:title="@string/scan_some_text"/> <item android:id="@+id/btn_close_app" android:title="@string/close_app_text"/> </menu>
8.运行效果图
注意事项:
请将代码中的s.e.l.e.c.t中间的点号全部去掉。