ActionBar(18)context action bar 两个示例

一.通过activity启动Context Action Bar

1.主java

public class ActivityActionModeFrgmt extends Fragment implements
        OnCheckedChangeListener, ActionMode.Callback {
    private ActionMode mActionMode;
    private CheckBox mCheckBox;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frgmt_cab_for_activity, container,
                false);
        mCheckBox = (CheckBox) v.findViewById(R.id.vid_check_box);
        mCheckBox.setOnCheckedChangeListener(this);
        return v;
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            mActionMode = getActivity().startActionMode(this);// activity启动一个继承ActionMode,需要ActionMode.Callback
        }else
        {
            mActionMode.finish();
        }
    }

    // for ActionMode.Callback
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = getActivity().getMenuInflater();
        inflater.inflate(R.menu.menu_context_for_activity, menu);// 创建context action
                                                                // bar的菜单
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        mode.setTitle("Checked");
        return true;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_delete:
            Toast.makeText(getActivity(), "delete", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_send:
            Toast.makeText(getActivity(), "send", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_share:
            Toast.makeText(getActivity(), "share", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_settings:
            Toast.makeText(getActivity(), "settings", Toast.LENGTH_SHORT)
                    .show();
            break;
        default:
            break;
        }
        mode.finish();
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        mCheckBox.setChecked(false);
    }
}

2.菜单文件 menu_context_for_activity.xml

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

    <item
        android:id="@+id/action_delete"
        android:icon="@android:drawable/ic_menu_delete"
        android:showAsAction="ifRoom|withText"
        android:title="@string/delete"
        android:titleCondensed="delete">
    </item>
    <item
        android:id="@+id/action_share"
        android:showAsAction="ifRoom|withText"
        android:title="@string/share"/>
    <item
        android:id="@+id/action_send"
        android:showAsAction="ifRoom|withText"
        android:title="@string/send"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

</menu>

3.布局文件 frgmt_cab_for_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/aty_action_mode" />

    <CheckBox
        android:id="@+id/vid_check_box"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/view_s_check_mode" />

</LinearLayout>

二. ListView 用Context Action Bar 多选删除示例

1.MultiCabFrgmt.java

public class MultiCabFrgmt extends Fragment implements MultiChoiceModeListener {

    private ListView mListView;
    private SelectionArrayAdapter adapter;
    private List<ItemData> data;

    private ShareActionProvider mShareActionProvider;

    public boolean isItemSelected(int position) {
        return false;
    }

    private void init() {
        data = new ArrayList<ItemData>();
        ItemData ida;
        for (int i = 0; i < 32; ++i) {
            ida = new ItemData();
            ida.txt = "item" + i;
            data.add(ida);
        }
        adapter = new SelectionArrayAdapter(getActivity(),
                android.R.layout.simple_list_item_1, data);
        mListView.setAdapter(adapter);
        mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);//CHOICE_MODE_SINGLE
        mListView.setMultiChoiceModeListener(this);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frgmt_cab_for_listview, container, false);
        mListView = (ListView) v.findViewById(R.id.id_listview);
        init();
        return v;
    }

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = getActivity().getMenuInflater();
        inflater.inflate(R.menu.menu_context_for_listview, menu);
        MenuItem mi = menu.findItem(R.id.action_share);
        mShareActionProvider = (ShareActionProvider) mi.getActionProvider();
        mShareActionProvider.setShareIntent(new Intent(Intent.ACTION_SEND)
                .setType("image/*"));
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return true;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
        case R.id.action_delete: {
            for (int i = data.size() - 1; i >= 0; --i) {
                if (data.get(i).selected) {
                    data.remove(i);
                }
            }
        }
            break;
        case R.id.action_share:
            break;
        case R.id.action_settings:
        }
        mode.finish();
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        for (int i = 0; i < data.size(); i++) {
            data.get(i).selected = false;
        }
    }

    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position,
            long id, boolean checked) {
        ItemData ida = data.get(position);
        ida.selected = !ida.selected;
        adapter.notifyDataSetChanged();
        mode.setTitle(mListView.getCheckedItemCount() + " selected");
    }
}

2.SelectionArrayAdapter.java

public class SelectionArrayAdapter extends ArrayAdapter<ItemData> {

    private List<ItemData> data;
    private LayoutInflater inflater;
    private int resource;

    private void init(Context context,int resource,List<ItemData> data){
        this.data = (ArrayList<ItemData>) data;
        inflater = LayoutInflater.from(context);
        this.resource = resource;
    }
    public SelectionArrayAdapter(Context context, int resource,
            int textViewResourceId, List<ItemData> data) {
        super(context, resource, textViewResourceId, data);
        init(context,resource,data);
    }
    public SelectionArrayAdapter(Context context, int resource,
            List<ItemData> data) {
        super(context, resource, data);
        init(context,resource,data);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            convertView = inflater.inflate(this.resource, null);
        }
        TextView tv = (TextView) convertView.findViewById(android.R.id.text1);
        ItemData item = getItem(position);
        tv.setText(item.txt);
        if (item.selected) {
            convertView.setBackgroundColor(0x7f0f0f0f);// this is a selected
        }else{
            convertView.setBackgroundColor(0x7ff0f0f0); // default color
        }
        return convertView;
    }

    @Override
    public ItemData getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public void clear() {
        super.clear();
    }

    @Override
    public int getCount() {
        int sz = data.size();
        return sz;
    }
}

3.Context Action Bar的操作项菜单文件 menu_context_for_listview.xml

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

    <item
        android:id="@+id/action_share"
        android:orderInCategory="100"
        android:actionProviderClass="android.widget.ShareActionProvider"
        android:showAsAction="always"
        android:title="@string/share"/>
     <item
        android:id="@+id/action_delete"
        android:showAsAction="ifRoom|withText"
        android:title="@string/delete"/>
    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

</menu>
时间: 2024-08-11 15:49:09

ActionBar(18)context action bar 两个示例的相关文章

ActionBar(17)context action bar简介,启动,各函数介绍

一.Context Action Bar简介 它是一个ActionBar,有各种操作项,但它不是始终显示的ActionBar,它需要上下文才显示.样式如下: 二.Context Action Bar的启动 有多种启动context action bar的方式,常见的如下: 1:通过activity的ActionMode startActionMode(ActionMode.Callback callback)启动 2:listview的setChoiceMode(int choiceMode) 

Android UI开发第二十四篇——Action Bar

Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式.在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观.你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中. Action bar的主要目的是: 1.  提供一个用于识别应用

Android中文翻译 - Adding the Action Bar 添加活动栏(action bar)

2014-10-28 张云飞VIR 翻译自:https://developer.android.com/training/basics/actionbar/index.html 添加活动栏(Adding the Action Bar) 译者注:我找不到更好的词汇翻译action bar,虽然我也认为 活动栏 不是个好的翻译,但总要有个中文名字.不过为了方便识别,本文仍继续使用英文的actionbar 活动栏action bar 是非常重要的设计元素之一,你可以为你的app中的activity来实

Action Bar

简介 action bar 是一个功能窗口,用于标识应用程序和用户的位置,并提供给用户一些操作和导航模式.你应该在大多数需要提供用户操作或导航的activities 时使用它.因为action bar 为用户在不同的屏幕上提供了一致的界面,并且它优雅的适应类不同的系统外观.你可以通过使用ActionBar 类来控制action bar . Action Bar 的主要目标: 提供一个专有的空间用于显示应用程序的标识或用户的位置 在不同的application上提供一致的导航和细化视图 突出显示一

Android设计和开发系列第二篇:Action Bar(Develop—API Guides)

Action Bar IN THIS DOCUMENT Adding the Action Bar Removing the action bar Using a logo instead of an icon Adding Action Items Handling clicks on action items Using split action bar Navigating Up with the App Icon Adding an Action View Handling collap

Android Action Bar 详解篇 .

作者原创,转载请标明出处:http://blog.csdn.net/yuxlong2010 作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活动的标题,突出活动的一些关键操作(如“搜索”.“创建”.“共享”等).作为菜单的灵活使用,还可以实现类似TabWidget的标签功能以及下拉导航的功能,系统能够很好根据不同的屏幕配置来适应ActionBar的外观,配合起Fragemtn可谓是十分强大. 那么,对于今天的主角ActionBar怎么去添

Android 自定义title 之Action Bar

Android 自定义title 之Action Bar 2014-06-29  飞鹰飞龙...  摘自 博客园  阅 10519  转 25 转藏到我的图书馆 微信分享: Action Bar是在窗口上指示用户位置的组件,同时给用户提供导航和操作.使用Action Bar可以让你的应用在不同配置的屏幕上看起来比较一致.在开始之前,先了解一些相关的术语: Action Bar有以下几项关键功能: 1)为你的App提供一个装饰处,同时也可以让用户知道自己的所在位置: 2)让一些重要的操作以一种可预

Android之Action Bar

Action Bar在实际应用中,很好地为用户提供了导航,窗口位置标识,操作点击等功能.它出现于Android3.0(API 11)之后的版本中,在2.1之后的版本中也可以使用. 添加与隐藏Action Bar 在3.0之后的版本中(android:minSdkVersion 或者 android:targetSdkVersion 属性被设置成11或者更高),默认在activity中添加了Action Bar,不用额外添加.如果不想在activity中使用Action Bar,我们可以通过设定a

Android设计和开发系列第二篇:Action Bar(Develop—Training)

Adding the Action Bar GET STARTED DEPENDENCIES AND PREREQUISITES Android 2.1 or higher YOU SHOULD ALSO READ Action Bar Implementing Effective Navigation DESIGN GUIDE Action Bar The action bar is one of the most important design elements you can imple