ActionBar(Undone)

来源:互联网 发布:linux unrar 编辑:程序博客网 时间:2024/05/20 14:19

ActionBar 替换3.0以前的tittle bar和menu。
目的是用来替换掉菜单按键功能,长按操作功能,提供一种全新的操作体验

ActionBar 低版本的支持

ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用Support Library v7。

1   导入Android Support V7 library2   将Activity 继承 ActionBarActivity3   给Activity 设置theme,主题需要是v7下的@style/Theme.AppComp.XXX or descendant with this Activity

ActionBar的组成
这里写图片描述
1 应用的图标标题部分:包含了 图标,主标题,副标题,回退部分
2 导航模式部分:这里显示的是导航模式中的List(导航模式有三种,标准,list,tab)
3 Action button 部分: 用来响应用户的点击事件
4 溢出菜单部分:如果Action button拜访不下去了,会在此处显示

ActionBar标题图标部分

用来显示标题和回退的

    // 设置actionbar的标题部分        actionBar.setTitle("主标题");        actionBar.setSubtitle("副标题");        actionBar.setDisplayShowTitleEnabled(true);// 设置菜单 标题是否可见 默认可见.        actionBar.setIcon(R.mipmap.ic_launcher);        actionBar.setDisplayShowHomeEnabled(true);// 设置应用图标是否可见   默认不可见        // logo和icon的区别: AndroidManifest 里也有        // 默认 logo优先显示于icon        actionBar.setLogo(R.mipmap.bg_photo);        actionBar.setDisplayUseLogoEnabled(true);// 设置是否显示Logo优先,也可以理解为显示logo  默认不可见        actionBar.setDisplayHomeAsUpEnabled(true);// 设置back按钮是否可见

Action bar提供了用于Fragment间切换的内置三种导航标签

public abstract void setNavigationMode(@NavigationMode int mode);
* @param mode The new mode to set.
* @see #NAVIGATION_MODE_STANDARD 就是没有导航
* @see #NAVIGATION_MODE_LIST
* @see #NAVIGATION_MODE_TABS

List模式

这里写图片描述

  //设置actionBar的导航模式
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

        List<String> al = new ArrayList<String>();
        al.add("第一个导航,一进入就选中");
        al.add("第二个导航");
        al.add("第二个导航");
        ArrayAdapter MyAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, al);

//通过搜索adapter找到       /* public abstract void setListNavigationCallbacks(SpinnerAdapter        adapter, OnNavigationListener callback);
        @param SpinnerAdapter是BaseAdapter的父类, 对于纯String类, 我们直接使用ArrayAdapter        @param OnNavigationListener 没有实现类, 需要自己实现*/        actionBar.setListNavigationCallbacks(MyAdapter, new ActionBar.OnNavigationListener() {            @Override            public boolean onNavigationItemSelected(int itemPosition, long itemId) {                Toast.makeText(MainActivity.this, "itemPosition+" + itemPosition + ",itemId" + itemId, Toast.LENGTH_SHORT).show();
                return false;//Returns True if the event was handled, false otherwise  
            }        });

Tab模式

这里写图片描述

 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab = null;

        for (int i = 0; i < 3; i++) {
        //1.创建tab
        tab = actionBar.newTab();
            tab.setText("tab" + i);
            tab.setIcon(R.mipmap.bg_photo);

            // 设置Tab的监听 Action Bar Tab must have a Callback 不写会报错
            tab.setTabListener(new ActionBar.TabListener() {
                @Overridepublic void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
                    Toast.makeText(getApplicationContext(), tab.getText() + "选中了", Toast.LENGTH_SHORT).show();//默认第一个tab选中
                }

                @Overridepublic void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
                    Toast.makeText(getApplicationContext(), tab.getText() + "取消选中了", Toast.LENGTH_SHORT).show();
                }

                @Overridepublic void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
                    Toast.makeText(getApplicationContext(), tab.getText() + "重新选中了", Toast.LENGTH_SHORT).show();
                }
            });
            //将tab添加到actionBar中
            actionBar.addTab(tab);
}


Action button的相关操作(Undone)

android 5.0 ToolBar

引用ActionBar常见问题

请问,当project的minSdkVersion 和 targetSdkVersion都为10的时候,这种针对2.3.3.的工程,是否可以引用android-support-v7-appcompat这个包来使用ActionBar呢?
回复summer_yang:可以使用
回复xyz_lmn:请问在2.3.3工程中引用了android-support-v7-appcompat后,工程会报出很多类似错误如下:
G:\workspace\android-support-v7-appcompat\res\values-v14\themes_base.xml:94: error: Error: No resource found that matches the given name: attr ‘android:actionBarWidgetTheme’.
是什么导致的呢?如何修正?
回复summer_yang:修改编译用的SDK版本

Android Actionbar(标题栏)的背景设置

AndroidActionbar标题栏ActionbarSherlock
这东西Android官方文档是有的,这里顺便说下使用ActionbarSherlock时的设置。

For Android 3.0 and higher only(对于不需要兼容2.x时可以直接如下设置)
When supporting Android 3.0 and higher only, you can define the action bar’s background like this:

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <!-- the theme applied to the application or activity -->    <style name="CustomActionBarTheme"           parent="@style/Theme.Holo.Light.DarkActionBar">        <item name="android:actionBarStyle">@style/MyActionBar</item>    </style>    <!-- ActionBar styles 背景主要就是这里设置了-->    <style name="MyActionBar"           parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">        <item name="android:background">@drawable/actionbar_background</item>    </style></resources>

actionbar_background背景资源如下:

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

For Android 2.1 and higher(需要兼容2.x时要做的如下)

When using the Support Library, the same theme as above must instead look like this:

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <!-- the theme applied to the application or activity -->    <style name="CustomActionBarTheme"           parent="@style/Theme.AppCompat.Light.DarkActionBar">        <item name="android:actionBarStyle">@style/MyActionBar</item>        <!-- Support library compatibility -->        <item name="actionBarStyle">@style/MyActionBar</item>    </style>    <!-- ActionBar styles -->    <style name="MyActionBar"           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">        <item name="android:background">@drawable/actionbar_background</item>        <!-- Support library compatibility -->        <item name="background">@drawable/actionbar_background</item>    </style></resources>

ActionbarSherlock也类似这样做,
Theme.AppCompat.Light.DarkActionBar换成Theme.Sherlock.Light;
Widget.AppCompat.Light.ActionBar.Solid.Inverse换成
Widget.Sherlock.Light.ActionBar.Solid.Inverse 就行了

更改返回按钮的图标

很多的Android应用左上角都有返回按钮
在Android的网站上 发现了2种可以更改的方法
1.在java代码环境中设置

actionBar = getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setHomeAsUpIndicator(R.drawable.back);

如果有错误提示 Call requires API level 18 (current min is 14): android.app.ActionBar#setHomeAsUpIndicator

说明当前的最小API等级低于18 那么就参考第二种方法了

2.在styles.xml中新增一种style

<style name="style_titlebar_normal" parent="Theme.AppCompat.Light">        <item name="android:homeAsUpIndicator">@drawable/back</item> <!--返回icon-->    </style>  

然后在AndroidManifest.xml中 在其Activity 的theme中设置成该style

<activity            android:name="com.logic.activity.Activity1"            android:theme="@style/style_titlebar_normal"            >        </activity>

这种方法对API level没有要求 就是略复杂些

0 0