Android Customer ActionProvider
来源:互联网 发布:c语言经典编程282例pdf 编辑:程序博客网 时间:2024/06/05 15:55
Android自定义ActionProvider.
到底ActionProvider长什么样子的呢?就是这样子的:
ActionProvider属于Actionbar的一部分,所以需要支持API 10及以下的就需要使用到Support Library,然而,每次使用Support包的时候,总是想杀人,总是没有直接支持的来得好.我研究了一个晚上+一个早上,才知道怎么用,我真是太笨了.下面以Support Library为准.
SDK中有一个及成绩ActionProvider的ShareActionProvider,这可以调用系统的分享组件.具体的使用在ApiDemos中有,这里也有 http://developer.android.com/guide/topics/ui/actionbar.html#ActionProvider,分享的就不再啰嗦.
下面讲一下自定义:
思路:在Actionbar显示一个按钮,点击按钮 之后跳出子菜单(Submenu).
首先创建一个类,继承与ActionProvider,重写 onCreateActionView(), onPrepareSubMenu()及 hasSubMenu()这三个方法,注意的是,onCreateActionView返回的是null,如果不返回null,是无法弹出子菜单的.onPrepareSubMenu()就是创建子菜单,根据自己的需要创建.hasSubMenu()必须返回true,也必须重写,因为默认是返回false的.自定义好ActionProvider之后,接下来就添加到菜单项中,我新建了一个main.xml菜单文件,
因为使用的Support Library,创建菜单的时候一定要写上:
xmlns:app="http://schemas.android.com/apk/res-auto"
而属性的定义:app:showAsAction="always" 及 app:actionProviderClass="org.robam.menutest.app.MainActivity$MyActionbarProvider",这里的前缀app和上面xmlns对应.应用内部类使用的是$符号,而不是"."号,所自定义的MyActionbarProvider也要是static的.
public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** * 初始化菜单. * * @param menu * @return */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } /** * xml引用内部类,这个类需要时静态的. */ public static class MyActionbarProvider extends ActionProvider { Context mContext; /** * Creates a new instance. * * @param context Context for accessing resources. */ public MyActionbarProvider(Context context) { super(context); mContext = context; } /** * @return 需要返回null, 才能弹出子菜单. */ @Override public View onCreateActionView() { return null; } /** * 创建子菜单 * * @param subMenu */ @Override public void onPrepareSubMenu(SubMenu subMenu) { subMenu.clear(); subMenu.add(0, 0, 0, R.string.menu1).setIcon(R.drawable.ic_launcher).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(mContext, "submenu 1 was clicked", Toast.LENGTH_SHORT).show(); return true; } }); subMenu.add(0, 1, 1, R.string.menu2).setIcon(R.drawable.ic_launcher).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(mContext, "submenu 2 was clicked", Toast.LENGTH_SHORT).show(); return true; } }); } /** * @return 返回true代表有子菜单 */ @Override public boolean hasSubMenu() { return true; } }}
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="org.robam.menutest.app.MainActivity"> <item android:id="@+id/menu_item_share_action_provider_action_bar" app:showAsAction="always" android:title="hehe" android:icon="@drawable/ic_launcher" app:actionProviderClass="org.robam.menutest.app.MainActivity$MyActionbarProvider" /></menu>
好了,看看效果:
- Android Customer ActionProvider
- ActionProvider
- ActionProvider
- Android ActionBar详解(七)--->ActionProvider使用示例
- Customer
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- Mtk Android 之NvRAM customer
- 关于actionprovider
- ActionBar + ActionProvider + PopupMenu
- 如何自定义ActionProvider
- 15 ActionProvider代码例子
- ToolBar+ActionProvider的使用
- ubuntu 14.04上面如何编译customer android 2.3
- android增加自定义公用资源包customer-framework-res.apk
- android增加自定义公用类库customer-framework.jar
- 安卓中的分享,ActionProvider
- VC++获取程序版本号
- sicily 1931. 卡片游戏
- Spring整合Redis作为缓存
- Unity 用户手册用户攻略Unity 根底创立场景 (Scenes)
- 一步步学习微软InfoPath2010和SP2010--第八章节--使用InfoPath表单Web部件(2)--Web部件连接
- Android Customer ActionProvider
- 如何程序内给app评分
- AndroidMenifest.xml中minSdkVersion、targetSdkVersion、targetApiLevel的区别
- linux命令之kill
- get date list from data range in Oracle
- 一步步学习微软InfoPath2010和SP2010--第八章节--使用InfoPath表单Web部件(3)--参数
- android游戏开发中常用组件有哪些
- 对MVC、MVP、MVVM的理解
- VC++ 获取系统时间与计算某段代码所消耗时间(毫秒级)