当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现原生侧滑菜单的超简单方式

Android实现原生侧滑菜单的超简单方式

2019年07月24日  | 移动技术网IT编程  | 我要评论

杨帆 主持人,药盒设计,男人的责任

先来看看效果图

当你点击菜单可以更改图标,例如点击happy,首页就会变一个笑脸,这个实现的过程超级简单

你需要使用toolbar与drawablelayout两个比较新的控件

首先要写三个xml布局文件,我这里的布局文件是使用了include标签嵌入的,代码如下

headbar_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.toolbar xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/tbheadbar"
 android:layout_width="match_parent"
 android:layout_height="50dp"
 android:background="@color/red">

 <textview
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:text="@string/emotion"
  android:textcolor="@color/white"
  android:textsize="16sp" />

</android.support.v7.widget.toolbar>

my_drawablelayout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/dlmenu"
 android:layout_width="match_parent"
 android:layout_height="match_parent">

 <linearlayout
  android:id="@+id/llcontent"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@color/white"
  android:gravity="center"
  android:orientation="vertical">

  <imageview
   android:id="@+id/ivcontent"
   android:layout_width="100dp"
   android:layout_height="100dp"
   android:src="@drawable/angry" />

 </linearlayout>

 <!--android:layout_gravity="start"属性使这部分作为侧滑部分-->
 <!--一定要放在下面!!!关于控件的层次性如果不知道的同学去百度!哦不去谷歌-->
 <linearlayout
  android:id="@+id/llmenu"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_gravity="start"
  android:background="@color/white"
  android:orientation="vertical">

  <!--用于设置菜单项-->
  <listview
   android:id="@+id/lvmenu"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:divider="@null" />

 </linearlayout>

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

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 tools:context="com.demo.usher.demo_slidingmenu.mainactivity">

 <!--头部-->
 <include layout="@layout/headbar_toolbar" />

 <!--主布局-->
 <include layout="@layout/my_drawablelayout" />

</linearlayout>

如何应用在java文件中【一个文件搞定】

package com.demo.usher.demo_slidingmenu;

import android.os.bundle;
import android.support.v4.widget.drawerlayout;
import android.support.v7.app.actionbardrawertoggle;
import android.support.v7.app.appcompatactivity;
import android.support.v7.widget.toolbar;
import android.view.view;
import android.widget.adapterview;
import android.widget.arrayadapter;
import android.widget.imageview;
import android.widget.linearlayout;
import android.widget.listview;

import java.util.arraylist;
import java.util.list;

import butterknife.bindview;
import butterknife.butterknife;

public class mainactivity extends appcompatactivity {

 @bindview(r.id.tbheadbar)
 toolbar mtbheadbar;

 /*侧滑菜单布局*/
 @bindview(r.id.llmenu)
 linearlayout mllmenu;

 /*侧滑菜单listview放置菜单项*/
 @bindview(r.id.lvmenu)
 listview mlvmenu;

 @bindview(r.id.ivcontent)
 imageview mivcontent;

 @bindview(r.id.dlmenu)
 drawerlayout mmydrawable;

 actionbardrawertoggle mtoggle;

 private list<string> lvmenulist = new arraylist<string>() {{
  add("angry");
  add("happy");
  add("sad");
  add("embarrassed");
 }};

 private list<integer> imagelist = new arraylist<integer>() {{
  add(r.drawable.angry);
  add(r.drawable.happy);
  add(r.drawable.sad);
  add(r.drawable.embarrassed);
 }};

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);
  butterknife.bind(this);

  /*初始化toolbar与drawablelayout*/
  inittoolbaranddrawablelayout();

  mlvmenu.setadapter(new arrayadapter(this, android.r.layout.simple_expandable_list_item_1, lvmenulist));
  mlvmenu.setonitemclicklistener(new adapterview.onitemclicklistener() {
   @override
   public void onitemclick(adapterview<?> parent, view view, int position, long id) {
    mivcontent.setimageresource(imagelist.get(position));
    mmydrawable.closedrawers();/*收起抽屉*/
   }
  });
 }

 private void inittoolbaranddrawablelayout() {
  setsupportactionbar(mtbheadbar);
  /*以下俩方法设置返回键可用*/
  getsupportactionbar().sethomebuttonenabled(true);
  getsupportactionbar().setdisplayhomeasupenabled(true);
  /*设置标题文字不可显示*/
  getsupportactionbar().setdisplayshowtitleenabled(false);

  mtoggle = new actionbardrawertoggle(this, mmydrawable, mtbheadbar, r.string.open, r.string.close) {
   @override
   public void ondraweropened(view drawerview) {
    super.ondraweropened(drawerview);
    //toast.maketext(mainactivity.this, r.string.open, toast.length_short).show();
   }

   @override
   public void ondrawerclosed(view drawerview) {
    super.ondrawerclosed(drawerview);
    //toast.maketext(mainactivity.this, r.string.close, toast.length_short).show();
   }
  };
  /*mmydrawable.setdrawerlistener(mtoggle);不推荐*/
  mmydrawable.adddrawerlistener(mtoggle);
  mtoggle.syncstate();/*同步状态*/
 }
}

关于butterknife注解与样式

butterknife直接在gradle文件中配置好如下【缺什么就补什么】

apply plugin: 'com.android.application'
apply plugin: 'android-apt'

android {
 compilesdkversion 24
 buildtoolsversion "24.0.2"

 defaultconfig {
  applicationid "com.demo.usher.demo_slidingmenu"
  minsdkversion 15
  targetsdkversion 24
  versioncode 1
  versionname "1.0"
 }
 buildtypes {
  release {
   minifyenabled false
   proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'
  }
 }

}

buildscript {
 repositories {
  mavencentral()
 }
 dependencies {
  classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
 }
}

dependencies {
 compile filetree(include: ['*.jar'], dir: 'libs')
 testcompile 'junit:junit:4.12'
 compile 'com.android.support:appcompat-v7:24.2.0'
 compile 'com.jakewharton:butterknife:8.4.0'
 /*butterknife相关*/
 apt 'com.jakewharton:butterknife-compiler:8.4.0'
 compile 'com.android.support:support-v4:24.2.0'
}

style【关于返回键的颜色样式等在style文件中修改】

<resources>

 <style name="apptheme" parent="theme.appcompat.light.noactionbar">
  <item name="drawerarrowstyle">@style/apptheme.drawerarrowtoggle</item>
 </style>

 <style name="apptheme.drawerarrowtoggle" parent="base.widget.appcompat.drawerarrowtoggle">
  <item name="color">@android:color/white</item>
 </style>

</resources>

总结

其实很多时候我们在使用第三方控件的时候往往不知道背后是怎么实现的,使用原生控件可以让我们更好的理解一个交互或者说实现一个功能的原理,有利于做出性能与交互都非常优秀的app,以上就是这篇文章的全部内容,希望对大家的工作或学习带来一定的帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网