• Android开源界面库--ResideMenu用法


    网上关于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.
  • 相关阅读:
    策略模式 Web.Net版 [原理+代码] 鸭子呱呱叫
    关于onMouseOut违背逻辑关系的解决办法!
    js漂浮组件发布 ppFloat.js.1.0
    (转)跟我一起制作数据采集获取淘宝网店宝贝数据信息(二)
    (转)WCF学习笔记(一)——WCF基础
    (转)IIS负载均衡Application Request Route详解第一篇: ARR介绍
    (转)【原创】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
    (转)HTTP与Tcp协议下双工通信的差异
    (转)一个仿新浪微博的网站 mvc ado
    (转)微软开源的项目和架构学习
  • 原文地址:https://www.cnblogs.com/lechance/p/4373325.html
Copyright © 2020-2023  润新知