關於Android菜單上的記錄

關於Android菜單上的記錄

標籤(空格分隔): Android 菜單java


最近在作分享上一下事情,想遵照Android Design 規範作一個分享的菜單可是遇到一些問題android

  1. Android上ShareProvider 不支持捕獲分享(也許是我沒找到),因而就不能針對某個分享項作優化
  2. 拋棄ShareProvider使用,單純的使用Android的菜單分享選項,這樣雖然解決了不能捕獲的問題,可是也是帶了一個問題,就是沒法用比較少的代碼來完成分享。(發現彈出對話框的分享方式是最簡單省事的)

最後權衡了知識和利弊以後只能作個簡單的分享類,在CreateMenu 的時候addSubMenu ,
而後在OnMenuOptionSelected() handle 操做就能夠了。app

代碼以下ide

package com.changheng.app.ui;

import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;

import com.changheng.app.R;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.wechat.favorite.WechatFavorite;
import cn.sharesdk.wechat.friends.Wechat;
import cn.sharesdk.wechat.moments.WechatMoments;

/**
 * Created With Android Studio
 * User 47
 * Date 2015/2/13
 * Time 14:29
 * 分享助手
 */
public class ShareMenuHelper  {
    private Context mContext;
    private SubMenu mSubMenu;
    private static ShareItem[] SHARE_ITEM = {
            new ShareItem(R.drawable.logo_wechat,
                    R.string.wechat,
                    ShareSDK.getPlatform(Wechat.NAME)),
            new ShareItem(R.drawable.logo_wechatfavorite,
                    R.string.wechatfavorite,
                    ShareSDK.getPlatform(WechatFavorite.NAME)),
            new ShareItem(R.drawable.logo_wechatmoments,
                    R.string.wechatmoments,
                    ShareSDK.getPlatform(WechatMoments.NAME))
    };

    public ShareMenuHelper(Context context,SubMenu subMenu){
        mContext = context;
        mSubMenu = subMenu;
    }

    public void init(){
        int i = 0;
        for (ShareItem shareItem : SHARE_ITEM){
            SubMenu subMenu = mSubMenu.addSubMenu(
                    Menu.NONE,shareItem.id = i++,Menu.NONE,
                    shareItem.titleRes);
            subMenu.setIcon(shareItem.iconId);
        }
    }


    public void handlerMenuSelected(MenuItem menuItem, Platform.ShareParams shareParams){
        int id = menuItem.getItemId();
        for (ShareItem shareItem : SHARE_ITEM) {
            if (id == shareItem.id) doShare(shareItem,shareParams);
        }
    }

    private void doShare(ShareItem shareItem, Platform.ShareParams shareParams) {
        shareItem.platform.share(shareParams);
    }

    public static class ShareItem{
        public int id;
        public int iconId;
        public int titleRes;
        public Platform platform;

        public ShareItem( int iconId, int titleRes, Platform platform) {
            this.iconId = iconId;
            this.titleRes = titleRes;
            this.platform = platform;
        }
    }

}

這個東西主要比較糾結的地方在於,如何獲取submenu。找了很久才發現代碼是這樣的優化

menuItem.getSubMenu();
相關文章
相關標籤/搜索