网上关于ResideMenu用法的教程很多,但基本上全是从Github上copy下来的,Gitbub上给出的了对应的demo,但是由于我的IDE原因吧,demo一直导入不成功。为此自己又捣鼓了一翻,终于运行成功ResideMenu的真容。

                                                                

说实话,个人觉得ResideMenu还是要比SlidingMenu的效果好很多的。更主要的是它的文档(gitbub上的介绍)也相对SlidingMenu详细一些。gitbub的地址为https://github.com/SpecialCyCi/AndroidResideMenu

下载它的zip压缩包,打开后发现压缩包里的文件如下:



主要的就是ResideMenu和ResideMenuDemo两个文件夹,其中ResideMenu为该库的依赖项目。你可以通过一下方式导入工程中:

在eclipse上点击file->import->Existing Android Code into workspace->next->Browse(选择ResideMenu文件夹)->finish.
如果操作顺利,你会发现ResideMenu引入进来了,你可以打开它的AndroidManifest.xml来看一下:



注意,android.library=true 代表ResideMenu只是一个依赖项目,不能运行的,那怎么来使用它呢,
我们可以新建一个Android项目命名为ResideMenuTest,首先,我们要为这个项目引入ResideMenu,方法如下:


右键ResideMenuTest项目,选择Properties->android->add->选择ResideMenu,最后点击ok,中间截图如下:

 
     

这样,我们就把刚才导入的如果ResideMenu项目成功引入ResideMenuTest中来,这个时候你会发现ResideMenuTest项目里面会多出nine*****的jar包,说明我们导入成功了。
                   
                          

再来看一下ResideMenuTest项目的目录结构:


                            

java文件只有5个,一个activity+四个Fragment。我也是完全仿照官方的demo来做的,MenuActivity为界面入口:
代码如下:

package com.example.residemenutest;





import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentTransaction;

import android.view.MotionEvent;

import android.view.View;

import android.widget.Toast;

import com.special.ResideMenu.ResideMenu;

import com.special.ResideMenu.ResideMenuItem;





public class MenuActivity extends FragmentActivity implements View.OnClickListener{





    private ResideMenu resideMenu;

    private MenuActivity mContext;

    private ResideMenuItem itemHome;

    private ResideMenuItem itemProfile;

    private ResideMenuItem itemCalendar;

    private ResideMenuItem itemSettings;





    /**

     * Called when the activity is first created.

     */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mContext = this;

        setUpMenu();

        changeFragment(new HomeFragment());

    }





    private void setUpMenu() {





        // attach to current activity;

        resideMenu = new ResideMenu(this);

        resideMenu.setBackground(R.drawable.menu_background);

        resideMenu.attachToActivity(this);

        resideMenu.setMenuListener(menuListener);





        // create menu items;

        itemHome     = new ResideMenuItem(this, R.drawable.icon_home,     "Home");

        itemProfile  = new ResideMenuItem(this, R.drawable.icon_profile,  "Profile");

        itemCalendar = new ResideMenuItem(this, R.drawable.icon_calendar, "Calendar");

        itemSettings = new ResideMenuItem(this, R.drawable.icon_settings, "Settings");





        itemHome.setOnClickListener(this);

        itemProfile.setOnClickListener(this);

        itemCalendar.setOnClickListener(this);

        itemSettings.setOnClickListener(this);





        resideMenu.addMenuItem(itemHome);

        resideMenu.addMenuItem(itemProfile);

        resideMenu.addMenuItem(itemCalendar);

        resideMenu.addMenuItem(itemSettings);





        findViewById(R.id.title_bar_menu).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                resideMenu.openMenu();

            }

        });

    }









    @Override

    public void onClick(View view) {





        if (view == itemHome){

            changeFragment(new HomeFragment());

        }else if (view == itemProfile){

            changeFragment(new ProfileFragment());

        }else if (view == itemCalendar){

            changeFragment(new CalendarFragment());

        }else if (view == itemSettings){

            changeFragment(new SettingsFragment());

        }





        resideMenu.closeMenu();

    }





    private ResideMenu.OnMenuListener menuListener = new ResideMenu.OnMenuListener() {

        @Override

        public void openMenu() {

            Toast.makeText(mContext, "Menu is opened!", Toast.LENGTH_SHORT).show();

        }





        @Override

        public void closeMenu() {

            Toast.makeText(mContext, "Menu is closed!", Toast.LENGTH_SHORT).show();

        }

    };





    private void changeFragment(Fragment targetFragment){

        resideMenu.clearIgnoredViewList();

        getSupportFragmentManager()

                .beginTransaction()

                .replace(R.id.main_fragment, targetFragment, "fragment")

                .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE)

                .commit();

    }





    // What good method is to access resideMenu?

    public ResideMenu getResideMenu(){

        return resideMenu;

    }

}


它只要是声明了一个ResideMenu,并为这个ResideMenu进行了一些初始化。


MenuActivity的xml文件为:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:background="@android:color/white"

              android:orientation="vertical"

              android:layout_width="match_parent"

              android:layout_height="match_parent">





    <LinearLayout

            android:orientation="vertical"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:id="@+id/layout_top">





        <ImageView

                android:layout_width="match_parent"

                android:layout_height="3dp"

                android:background="#2ea3fe"/>





        <FrameLayout

                android:layout_width="fill_parent"

                android:layout_height="wrap_content">





            <Button

                    android:layout_width="28dp"

                    android:layout_height="28dp"

                    android:background="@drawable/titlebar_menu_selector"

                    android:id="@+id/title_bar_menu"

                    android:layout_gravity="left|center_vertical"

                    android:layout_marginLeft="10dp"/>





            <TextView

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:padding="7dp"

                    android:text="RESideMenu DEMO"

                    android:textSize="24sp"

                    android:textColor="#999999"

                    android:layout_gravity="center"/>

        </FrameLayout>





        <ImageView

                android:layout_width="match_parent"

                android:layout_height="5dp"

                android:background="#ebebeb"/>





    </LinearLayout>





    <FrameLayout

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:orientation="vertical"

            android:id="@+id/main_fragment">

    </FrameLayout>





</LinearLayout>

接下来是四个Fragment,它们只是一些简单的展示所以很简单,如比较漂亮的HomeFragment,代码如下:


package com.example.residemenutest;





import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.FrameLayout;

import com.special.ResideMenu.ResideMenu;





/**

 * User: special

 * Date: 14-13-20

 * Time: 下午1:33

 * Mail: cym@saymagic.cn

 */

public class HomeFragment extends Fragment {





    private View parentView;

    private ResideMenu resideMenu;





    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        parentView = inflater.inflate(R.layout.home, container, false);

        setUpViews();

        return parentView;

    }





    private void setUpViews() {

        MenuActivity parentActivity = (MenuActivity) getActivity();

        resideMenu = parentActivity.getResideMenu();





        parentView.findViewById(R.id.btn_open_menu).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                resideMenu.openMenu();

            }

        });





        // add gesture operation's ignored views

        FrameLayout ignored_view = (FrameLayout) parentView.findViewById(R.id.ignored_view);

        resideMenu.addIgnoredView(ignored_view);

    }





}

剩下的代码不一一展示了,都很简单,ResideMenu其实封装的已经很好了,你可以用调用residemenu的openMenu()打开这个菜单,closeMenu()关闭这个菜单等等。最后,把本文所需的ResideMenu文件和自己写的demo源码分享出来。

转载请注明---曹艳明个人博客:www.saymagic.cn.

Android开源界面库--ResideMenu用法的更多相关文章

  1. C++100款开源界面库[转]

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  2. C++ 100款开源界面库 (10)

    (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系列的 ...

  3. 仿迅雷播放器教程 -- C++ 100款开源界面库 (10)

      (声明:Alberl以后说到开源库,一般都是指著名的.或者不著名但维护至少3年以上的.那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码.这里并不是贬低,像Alberl前面那个系 ...

  4. 我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页

    因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.) 下面 ...

  5. Android开源图表库XCL-Charts版本号公布及展示页

    XCL-Charts V2.1 Android开源图表库(XCL-Charts is a free charting library for Android platform.) XCL-Charts ...

  6. Android开源图表库介绍

    XCL-Charts XCL-Charts V1.8     Android开源图表库(XCL-Charts is a free charting library for Android platfo ...

  7. 曲线控件我一直用codeproject上的那几个(C++ 100款开源界面库)

    Alberl#23楼[楼主] 2013-11-04 11:47 Alberl @baita00引用看了大神的教程,真的不错,学习了很多东西,^_^.这节教程里,大神好像在找曲线控件,是吗?大神有什特殊 ...

  8. WPF开源界面库及控件

    WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...

  9. WPF开源界面库

    WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...

随机推荐

  1. O029、教你看懂OpenStack日志

    参考https://www.cnblogs.com/CloudMan6/p/5456484.html   instance 从创建到删除的整个生命周期都是有 Nova 管理的,后面各小节我们以inst ...

  2. python之uWSGI和WSGI

    WSGI协议 首先弄清下面几个概念:WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web ...

  3. javascript相关的增删改查以及this的理解

    前两天做了一个有关表单增删改查的例子,现在贴出来.主要是想好好说一下this. 下面贴一张我要做的表格效果. 就是实现简单的一个增删改查. 1.点击增加后自动增加一行: 2.点击保存当前行会将属性改成 ...

  4. Hadoop入门到实战全套大数据Hadoop学习视频

    资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章或者后台回复[Hadoop]获取,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994

  5. Java学习笔记【三、运算符、表达式、语句】

    运算符 算数运算符 /* / % ++ -- 关系运算符 == != > /< >= /<= 位运算符 &(按位与,有0是0,否则1) |(按位或,有1是1,否则0) ...

  6. UDS报文解读

    UDS(Unified Diagnostic Services,统一的诊断服务)诊断协议是ISO 15765 和ISO 14229 定义的一种汽车通用诊断协议,位于OSI模型中的应用层,它可在不同的汽 ...

  7. 转 SQL连接查询语句(内、外、交叉和合并查询)

    转 http://blog.csdn.net/u010011371/article/details/50596535 1.内连接 (INNER JOIN) 内连接也称自然连接,它是根据两个或多个表中的 ...

  8. 点击startup.bat启动tomcat出现乱码

    找到tomcat目录下的/conf/logging.properties添加语句:java.util.logging.ConsoleHandler.encoding = GBK重启tomcat 问题解 ...

  9. JQuery实现简单的服务器轮询效果

    很多论坛都有进入后,弹出提示,说有多少封邮件没有看,或者是一个oa系统,进入后,提示有多少个任务没有做.每隔一段时间会提示一次,但是如何实现呢.其实,利用jquery的话,会比较简单,核心元素就是js ...

  10. 关于上部盒子里有图片下面盒子magin-top负值的层级问题

    .box{ width: 800px; box-sizing: border-box; margin: 50px auto 0; background: pink; } .imgBox{ width: ...