zoukankan      html  css  js  c++  java
  • Android 按Menu弹出菜单

    esanimmenu_in.xml    资源文件(动画)

    <?xml version="1.0" encoding="UTF-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator" >
        <translate
            android:duration="@android:integer/config_shortAnimTime"
            android:fromYDelta="25.0%"
            android:toYDelta="0.0" />
        <alpha
            android:duration="@android:integer/config_shortAnimTime"
            android:fromAlpha="0.0"
            android:toAlpha="1.0" />
    </set>
    View Code


    esanimmenu_out.xml   资源文件(动画)

    <?xml version="1.0" encoding="UTF-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_interpolator" >
        <translate
            android:duration="@android:integer/config_shortAnimTime"
            android:fromYDelta="0.0"
            android:toYDelta="50.0%" />
        <alpha
            android:duration="@android:integer/config_shortAnimTime"
            android:fromAlpha="1.0"
            android:toAlpha="0.0" />
    </set>
    View Code

    escolormenu_text_color.xml    资源文件(颜色)

    <?xml version="1.0" encoding="UTF-8"?>
    <selector
        xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:color="#ff031e3a" />
        <item android:state_enabled="false" android:color="#ff778797" />
    </selector>
    View Code

    esvaluescolors.xml 资源文件(颜色)

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="discuss_blue">#295782</color>
    <color name="white">#FFFFFF</color>
    <color name="black">#000000</color>
    <color name="discuss_writer">#778190</color>
    <color name="gray">#ff888888</color>
    <color name="photo_preview_select_album_layout_bg">#ff3a3a3a</color>
    </resources>
    View Code

    esvaluesstyles.xml 资源文件(样式)

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="menuTextStyle" parent="@android:style/TextAppearance.Small">
            <item name="android:textSize">12.0sp</item>
            <item name="android:textColor">@color/menu_text_color</item>
        </style>
        <style name="menushow">
            <item name="android:windowEnterAnimation">@anim/menu_in</item>
            <item name="android:windowExitAnimation">@anim/menu_out</item>
        </style>
    </resources>
    View Code

    eslayoutgridview_menu.xml  布局文件(gridview控件)

    <?xml version="1.0" encoding="utf-8"?>
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gvmenu"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:horizontalSpacing="12.0dip"
        android:listSelector="@drawable/menu_selectitem"
        android:numColumns="4"
        android:stretchMode="columnWidth"
        android:verticalSpacing="8.0dip" />
    View Code


    eslayoutmenu_item.xml   布局文件(gridview中的Item)

    <?xml version="1.0" encoding="UTF-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/RelativeLayout_Item"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="6.0dip"
        android:saveEnabled="false" >
    
        <ImageView
            android:id="@+id/item_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true" />
    
        <TextView
            android:id="@+id/item_text"
            style="@style/menuTextStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/item_image"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="7.0dip"
            android:text="" />
    
    </RelativeLayout>
    View Code

    srccnmxgsamenuMenuInfo.java  实体类

    public class MenuInfo {
        // 标题
        public String title;
        public int imgsrc;
        // 是否隐藏
        public boolean ishide;
        // menuId
        public int menuId;
        public MenuInfo(int menuId, String title,int imgsrc,Boolean ishide){
            this.menuId=menuId;
            this.title=title;
            this.imgsrc=imgsrc;
            this.ishide=ishide;
        }
    }
    View Code

    srccnmxgsamenuMenuUtils.java  常量资源类

    import java.util.ArrayList;
    import java.util.List;
    import cn.mxgsa.menu.MenuInfo;
    
    public class MenuUtils {
        public static final int MENU_SETTING=1;
        public static final int MENU_LOGOUT=2;
        public static final int MENU_HELP=3;
        public static final int MENU_EXIT=4;
        public static final int MENU_LOGIN=5;
        public static final int MENU_SERCH_FRIEND=6;
        public static final int MENU_GROUP_ACCURATE=7;
        public static final int MENU_GROUP_CATEGORY=8;
        public static final int MENU_CLEAR_LIST=9;
        public static final int MENU_ADD_FRIEND=10;
        public static final int MENU_ADD_GROUP=11;    
        public static final int MENU_CHAT_HISTORY=12;
        public static final int MENU_ONE_CLOSE=13;
        public static final int MENU_MULITE_CLOSE=14;
        
        private static List<MenuInfo> initMenu(){
            List<MenuInfo> list=new ArrayList<MenuInfo>();
            list.add(new MenuInfo(MENU_SETTING,"设置",R.drawable.menu_ic_setting,false));
            list.add(new MenuInfo(MENU_LOGOUT,"切换用户",R.drawable.menu_ic_logout,false));
            list.add(new MenuInfo(MENU_HELP,"检查更新",R.drawable.menu_ic_help,false));
            list.add(new MenuInfo(MENU_EXIT,"退出应用",R.drawable.menu_ic_exit,false));
            return list;
        }
        
        /**
         * 获取当前菜单列表
         * @return
         */
        public static List<MenuInfo> getMenuList(){
            List<MenuInfo> list=initMenu();        
            list.add(0,new MenuInfo(MENU_SERCH_FRIEND,"搜索好友",R.drawable.menu_ic_search_friend,false));
            list.add(0,new MenuInfo(MENU_ADD_GROUP,"添加分组",R.drawable.menu_ic_addgroup,false));
            list.add(0,new MenuInfo(MENU_ADD_FRIEND,"添加好友",R.drawable.menu_ic_addfriend,false));
            list.add(0,new MenuInfo(MENU_SERCH_FRIEND,"搜索好友",R.drawable.menu_ic_search_friend,false));
                
            return list;
        }
        
    }
    View Code

    srccnmxgsamenuMenuAdapter.java

    import java.util.List;
    import cn.mxgsa.menu.MenuInfo;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MenuAdapter extends BaseAdapter {
    
        private final List<MenuInfo> list;
        private final LayoutInflater inflater;
        public MenuAdapter(Context context,List<MenuInfo> list){
            this.list=list;
            inflater=LayoutInflater.from(context);
        }
        
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }
    
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return list.get(arg0);
        }
    
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }
    
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            View view=arg1;
            if (view==null) {
                view=inflater.inflate(R.layout.menu_item, null);
            }
            MenuInfo mInfo=list.get(arg0);
            ImageView iView=(ImageView)view.findViewById(R.id.item_image);
            TextView tView=(TextView)view.findViewById(R.id.item_text);
            iView.setImageResource(mInfo.imgsrc);
            tView.setText(mInfo.title);
            if (mInfo.ishide) {            
                iView.setAlpha(80);            
            }
            return view;
        }
    
    }
    View Code


    srccnmxgsamenuMenuLikeQQActivity.java

    import java.util.List;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.GridView;
    import android.widget.PopupWindow;
    import android.widget.Toast;
    
    public class MenuLikeQQActivity extends Activity {
        
        // 定义popupwindow
        private PopupWindow popup;
        // 定义适配器
        private MenuAdapter menuAdapter;
        //菜单项列表
        private List<MenuInfo> menulists;
        //定义gridview
        private GridView menuGridView;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initPopuWindows();
        }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            return true;
        }
        
        /**
         * 设置PopupWindows
         */
        private void initPopuWindows() {
            //初始化gridview
            menuGridView=(GridView)View.inflate(this, R.layout.gridview_menu, null);
            //初始化PopupWindow,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT控制显示
            popup = new PopupWindow(menuGridView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
            // 设置menu菜单背景
            popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_background));
            // menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应
            popup.setFocusable(true);
            //设置显示和隐藏的动画
            popup.setAnimationStyle(R.style.menushow);
            popup.update();
            //设置触摸获取焦点
            menuGridView.setFocusableInTouchMode(true);
            //设置键盘事件,如果按下菜单键则隐藏菜单
            menuGridView.setOnKeyListener(new android.view.View.OnKeyListener() {
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    // TODO Auto-generated method stub
                    if ((keyCode == KeyEvent.KEYCODE_MENU) && (popup.isShowing())) {
                        popup.dismiss();  
                        return true;
                    }
                    return false;
                }
    
            });
            //添加菜单按钮事件
            menuGridView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    MenuInfo mInfo = menulists.get(arg2);
                    popup.dismiss();
                    if (mInfo.ishide) {
                        return;
                    }
                    switch (mInfo.menuId) {
                    case MenuUtils.MENU_ADD_FRIEND:
                        Toast.makeText(MenuLikeQQActivity.this, "添加好友", 1).show();
                        break;
                    case MenuUtils.MENU_ADD_GROUP:
                        Toast.makeText(MenuLikeQQActivity.this, "添加分组", 1).show();
                        break;
                    case MenuUtils.MENU_EXIT:
                        Toast.makeText(MenuLikeQQActivity.this, "退出应用", 1).show();
                        break;
                    case MenuUtils.MENU_GROUP_ACCURATE:
    
                        break;
                    case MenuUtils.MENU_GROUP_CATEGORY:
    
                        break;
                    case MenuUtils.MENU_HELP:
                        Toast.makeText(MenuLikeQQActivity.this, "检查更新", 1).show();
    
                        break;
                    case MenuUtils.MENU_LOGOUT:
                        Toast.makeText(MenuLikeQQActivity.this, "切换用户", 1).show();
                        break;
                    case MenuUtils.MENU_SERCH_FRIEND:
                        Toast.makeText(MenuLikeQQActivity.this, "搜索好友", 1).show();
                        break;
                    case MenuUtils.MENU_SETTING:
                        Toast.makeText(MenuLikeQQActivity.this, "设置", 1).show();
                        break;
                    }
                }
            });
        }
        
        @Override
        public boolean onMenuOpened(int featureId, Menu menu) {
            if (popup != null) {
                menulists = MenuUtils.getMenuList();
                menuAdapter = new MenuAdapter(this, menulists);
                menuGridView.setAdapter(menuAdapter);
                popup.showAtLocation(this.findViewById(R.id.linearlayout), Gravity.BOTTOM, 0, 0);
            }
            return false;// 返回为true 则显示系统menu
        }
    
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            menu.add("menu");
            return super.onPrepareOptionsMenu(menu);
        }
    }
    View Code

    DEMO完整源码:http://download.csdn.net/detail/androidsj/5597723

  • 相关阅读:
    PHP去除所有的空格
    PHP学习之分页类
    PHP学习之验证码类
    PHP学习之迭代生成器
    PHP学习之PHP trait解析
    PHP学习之PHP代码的优化
    PHP学习之PHP的语法糖
    PHP学习之PHP编码习惯
    PHP介绍
    Centos7安装PHP、安装MySQL、安装apache
  • 原文地址:https://www.cnblogs.com/androidsj/p/3140478.html
Copyright © 2011-2022 走看看