效果图

效果图
然后你点击菜单可以更改图标,例如点击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

更多相关文章

  1. Gradle for Android 系列:初识 Gradle 文件
  2. Android SQLite的数据库文件存储在SD卡中(一)
  3. 反编译APK 得到JAVA代码和资源文件源码
  4. JSP页面中有一个按钮 点击之后执行JAVA文件
  5. 如何在Java中递归解压缩文件?
  6. Java获得文件的创建时间(精确到秒)
  7. 安卓Android文件上传Demo报错 java.io.FileNotFoundException: /
  8. Eclipse创建的包变成文件夹的解决方法
  9. Android 多线程下载文件原理霸气解析介绍 (完结版)-----greendao

随机推荐

  1. Android Listview控件一些重要的属性
  2. Android 存储优化系列专题
  3. Android版本问题 版本冲突
  4. Android(安卓)WebDriver 浏览器自动测试
  5. android 4.2 源码位置
  6. Android监听通话正确操作方法介绍
  7. Android基本布局案例(2)
  8. spring-android的使用
  9. 近百android程序源码贡献 的自己看的
  10. Android中visibility属性VISIBLE、INVISI