ActionBar(Undone)

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 library
2   将Activity 继承 ActionBarActivity
3   给Activity 设置theme,主题需要是v7下的@style/Theme.AppComp.XXX or descendant with this Activity

ActionBar的组成
ActionBar(Undone)_第1张图片
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(Undone)_第2张图片

 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没有要求 就是略复杂些

你可能感兴趣的:(Actionbar)