ActionBar(15)自定义操作提供器ActionProvider之返回空ActionView

1.类代码

package com.e.acationbar;

import android.content.Context;
import android.view.ActionProvider;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View;
import android.widget.Toast;

public class CustomActionProviderNoActionView extends ActionProvider implements OnMenuItemClickListener {
    private Context mContext;

    // 在选中悬浮菜单中的菜单时,菜单项默认执行的操作。
    @Override
    public boolean onPerformDefaultAction() {
        // TODO Auto-generated method stub
        return super.onPerformDefaultAction();
    }

    /**
     * 创建子菜单
     *
     * @param subMenu
     */
    @Override
    public void onPrepareSubMenu(SubMenu subMenu) {
        // TODO Auto-generated method stub
        subMenu.clear();
        MenuInflater mif = new MenuInflater(mContext);
        mif.inflate(R.menu.provider_no_av, subMenu);// 通过菜单资源文件生成菜单

        // 用代码添加子菜单
        MenuItem mi = subMenu.add("用代码添加的菜单项");
        mi.setIcon(R.drawable.actionbar_camera_icon);
        mi.setOnMenuItemClickListener(this);
    }

    /**
     * @return 返回true代表有子菜单
     */
    @Override
    public boolean hasSubMenu() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        // TODO Auto-generated method stub
        int id = item.getItemId();
        Toast.makeText(mContext, "submenu " + id + "was clicked",
                Toast.LENGTH_SHORT).show();
        return true;
    }

    @Override
    public View onCreateActionView() {
        // TODO Auto-generated method stub
        return null;
    }

    public CustomActionProviderNoActionView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        mContext = context;
    }

}

2.子菜单配置文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_share"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:icon="@drawable/actionbar_facefriend_icon"
        android:showAsAction="never"
        android:title="@string/share">
    </item>
    <item
        android:id="@+id/action_custom_item"
        android:actionLayout="@layout/action_view_for_main"
        android:icon="@drawable/actionbar_particular_icon"
        android:showAsAction="ifRoom|collapseActionView"
        android:title="@string/action_custom_item">
    </item>

</menu>

3.这个provider在主菜单的中配置

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.e.acationbar.MainActivity" >

    <item
        android:id="@+id/action_customProvider_no_actionView"
        android:actionProviderClass="com.e.acationbar.CustomActionProviderNoActionView"
        android:icon="@drawable/actionbar_setting_icon"
        android:showAsAction="always"
        android:title="@string/custom_provider_no_av">
    </item>
...
</menu>
时间: 2024-10-09 09:51:23

ActionBar(15)自定义操作提供器ActionProvider之返回空ActionView的相关文章

ActionBar(16)自定义操作提供器ActionProvider之返回ActionView

1.代码 package com.e.acationbar; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.ActionProvider; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; impo

Android学习笔记(二十)——自定义内容提供器

//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 如果我们想要实现跨程序共享数据的功能,官方推荐的方式就是使用内容提供器,可以通过新建一个类去继承 ContentProvider 的方式来创建一个自己的内容提供器: 一.继承ContentProvider的六个方法: ContentProvider 类中有六个抽象方法,我们需要使用子类去继承它,并重写六个方法,我们先来认识这六个类.新建 MyProvider继承自 ContentProvide,代码如下所示: 1 p

Actionbar&amp;Toolbar 自定义Menu 布局--ActionProvider的使用

一般情况 多数时menu都是使用一张图片作为一个menu item,少数时候menu用文字,所以绝大多数时候,android:title.android:icon就能满足需求. 特殊情况 要求menu是一个可以动态控制的item,可以动态更新,布局也不止是一张图片一个string那么简单,如下图中红色框中的menu item所示,购物车的icon上悬浮数量,数量动态变化 除此之外还要求可以逻辑处理可以复用 这样的时候,就必须用到ActionProvider了. Api解释 与操作视窗类似,操作提

【练习】内容提供器二、创建自己的内容提供器并测试

1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不同的软件之间数据共享,提供统一的接口.也就是说,如果我们想让其他的应用使用我们自己程序内的数据,就可以使用ContentProvider定义一个对外开放的接口,从而使得其他的应用可以使用咱们应用的文件.数据库内存储的信息.当然,自己开发的应用需要给其他应用共享信息的需求可能比较少见,但是在Andro

《ASP.NET MVC 4 实战》学习笔记 11:模型绑定器与值提供器

一.创建自定义模型绑定器: 利用请求数据塑造模型对象并将对象传递给动作参数的过程称为模型绑定(Model Binding). 大多数时候动作参数是对象的主键或其他唯一标识符,因此我们可以不必在所有的动作中都放置一段重复的数据访问代码(下面代码“\\Before”部分),而是使用一个自定义的模型绑定器(下面代码“\\After”部分).它能够在动作执行之前加载存储对象,于是动作不再以唯一标识符而是以持久化的对象类型作为参数. // Before public ViewResult Edit (Gu

android--创建自己的内容提供器

想要实现跨程序共享数据需要用到内容提供器,内容提供器给别的应用提供了访问接口,可以新建一个类去继承ContentProvider来创建一个自己的内容提供器.ContentProvider类中有6种抽象方法,在使用子类继承的时候需要全部重写. 1 public class Myprovider extends ContentProvider { 2 3 @Override 4 /* 5 初始化时调用 6 通常会在这里完成对数据库的创建和升级等操作,返回true表示初始化成功. 7 只有当存在Con

SQLHelper——一个自定义SQL帮助器

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Configuration; 6 using System.Data.SqlClient; 7 using System.Data; 8 9 /// <summary> 10 /// 名称: 11 /// 自定义SQL帮助器 12 /// 摘要: 13 /// 提供简化sql操作

动作视图和动作提供器(Action Views and Action Providers)

首先承认:这篇文章翻译的有点不准确,因为这个action,我拿不准怎么翻译,不知道是翻译成动词还是名词.所以我把有道词典上的翻译结果列在下面. action n. 行动:活动:功能:战斗:情节 开始翻译 v7 appcompat 支持库为你的应用提供了几种和用户的交互方式.前面的几节课讲解了如何定义一个action(讲的并不怎么明白)可以是一个按钮或者一个菜单项.这节课讲解如何添加另外两种通用的组件. 应用栏上的动作视图有很多功能.例如,一个搜索动作视图可以让用户在应用栏上输入搜索文字,而不用改

Android内容提供器——创建自己的内容提供器

创建自己的内容提供器很简单,只需要新建一个类继承ContentProvider类,并重写其中的6个抽象方法即可.(需要全部重写) 一 URI的写法 一个标准的内容URI写法有两种: 1.路径结尾,表示访问表中所有内容: content://com.example.app.provider/table1 // * 可以代表任意长度的任意字符,所以也可以写成下面这样 content://com.example.app.provider/* 2.id结尾,表示访问表中特定id的内容: content: