Actionbarsherlock Demo 浅析 :Action Modes

**AndroidManifest文件里面:
<activity android:label="@string/action_modes" android:name=".ActionModes">
            <intent-filter>
               <action android:name="android.intent.action.MAIN"/>
               <category android:name="com.actionbarsherlock.sample.demos.EXAMPLE"/>
            </intent-filter>
</activity>
**Activity中的代码:

/**
ActionMode类
表示用户界面的上下文模式。行动模式可用于
模式与内容的相互作用,并取代部分的正常用户界面,直到完成。
良好的动作模式包括选择模式、搜索、内容编辑等。
*/
        ActionMode mMode;
        mMode = startActionMode(new AnActionModeOfEpicProportions());
	//SherlockActivity源文件中的函数
	public ActionMode startActionMode(ActionMode.Callback callback) {
		return getSherlock().startActionMode(callback);
	}
callback是ActionMode的内部接口,首先创建动作模式时调用。所提供的菜单将用于生成动作模式的动作按钮。
        ActionMode.Callback callback ;
	//内部包含的接口
	public interface Callback {
        /**
         * 首先创建动作模式时调用。所提供的菜单将用于生成动作模式的动作按钮。
         *
         * @param mode 被创建的Actionmode
         * @param menu 用于填充操作按钮的菜单
         * @return 如果动作模式需要被创建则返回真,否则应该被终止
         */
        public boolean onCreateActionMode(ActionMode mode, Menu menu);


        /**
         * 当动作模式无用的时候会被调用。
         *
         * @param mode 准备中的Action mode
         * @param menu <span style="font-family: Arial, Helvetica, sans-serif;">用于填充操作按钮的菜单</span>
         * @return 如果menu或者Action mode被更新了则返回true,否则返回false。
         */
        public boolean onPrepareActionMode(ActionMode mode, Menu menu);


        /**
         * 当用户单击按钮的时候触发
         *
         * @param mode 当前的ActionMode
         * @param item 被点击的控件
         * @return true 如果回调事件被处理了则返回true,否则返回false
         */
        public boolean onActionItemClicked(ActionMode mode, MenuItem item);


        /**
         * 当action mode消失或者销毁的时候会被调用。 
         *
         * @param mode The current ActionMode being destroyed
         */
        public void onDestroyActionMode(ActionMode mode);
    }
}
getSherlock返回一个ActionBarSherlock类。该类负责Actionbar动作设计模式。
	protected final ActionBarSherlock getSherlock() {
        if (mSherlock == null) {
            mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE);
        }
        return mSherlock;
<span style="white-space:pre">	</span>}
ActionBarSherlock里的wrap方法:使用Actionbar的抽象方法来包装Activity。
@param   选项控制的旗帜
 @return    返回与actionbar交互的实例
        public static ActionBarSherlock wrap(Activity activity, int flags);

****如果有时候发现图标消失,很有可能是因为图标的颜色问题,使用了白色的主题之后又使用了白色的图标,会导致图标看不见。


------------------------自定义Action Mode----------------------------------

参考:http://www.cnblogs.com/JinyaoLi/p/3868719.html

大致的思路:

1、新建一个类实现 ActionMode.Callback 接口

2、在类的onCreateActionMode()方法中调用menuInflater类,加载自己的menu资源。

3、实现自己的syle,自己的style是依赖于Theme的style,所以在Activity上THeme选单中选用自己的Theme。


--------示例:

1、实现ActionMode.Callback接口

//用来标记ActionMode和做出相关设置
private ActionMode mActionMode;
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
        // Called each time the action mode is shown. Always called after onCreateActionMode, but
        // may be called multiple times if the mode is invalidated.
        @Override
        public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
            // TODO Auto-generated method stub
            return false;
        }
         // Called when the user exits the action mode
        @Override
        public void onDestroyActionMode(ActionMode arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "Action Mode Closed",Toast.LENGTH_SHORT).show();
            mActionMode = null;
        }
        // Called when the action mode is created; startActionMode() was called
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflater = mode.getMenuInflater();
             inflater.inflate(R.menu.main_context_menu, menu);
            return true;
        }
         // Called when the user selects a contextual menu item
        @Override
        public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
            // TODO Auto-generated method stub
            int id = arg1.getItemId();
            
            return false;
        }
    };
2、加载menu资源可以使用menu.add,也可以自己在res文件夹下创建属于menu的xml文件。

3、应用自己定义的Theme主题

<style name="MyActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionModeCloseDrawable">@drawable/ic_launcher</item>
        <item name="android:actionModeBackground">@color/yellow</item>

        <!-- ActionMode右边的按钮是一个特殊的CloseButton,分割线与CloseButton的Style有关 -->
        <!-- 删除ActionMode的Divider-->
        <item name="android:actionModeCloseButtonStyle">@null</item>
    </style>
<!-- 这是自己定义的Actionbar的主题-->
    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:background">@color/green</item>
    </style></span>
4、运用自己的主题

<activity android:label="@string/activity_name" android:name=".SampleList"  android:theme="@style/MyActionBarTheme"> 
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity></span>


这样就可以依据自己喜欢的样式来设计Actionbar。参考:http://www.cnblogs.com/JinyaoLi/p/3868719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值