Android ActionBar 一步一步分析 (转)

原文摘自:http://blog.csdn.net/android2me/article/details/8874846

1.Action Bar 介绍

我们能在应用中看见的actionbar一般就是下图的样子,比如快图应用

Android ActionBar 一步一步分析 (转)

1.App icon 应用的图标,左侧带应用相当于back返回键

2.ViewControl

3.Action button 相当于普通的Button可以监听点击事件

4.Action overflow 三个点,相当于手机上的menu键,可以显示隐藏的action button

下面是一个简单的关于Action Bar的例子:

  1. package com.example.demo_actionbarbasic;
  2. import com.example.demo_actionbarbasic.R;
  3. import android.app.ActionBar;
  4. import android.app.Activity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.widget.Toast;
  10. public class MainActivity extends Activity {
  11. private MenuItem menuItem = null;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. // 通过hilde()和show()方法可以控制actionbar的隐藏和显示
  17. // ActionBar actionBar = getActionBar();
  18. // actionBar.hide();
  19. // actionBar.show();
  20. }
  21. // 我们可以看到,actonbar的用法跟选项菜单是一样的
  22. @Override
  23. public boolean onCreateOptionsMenu(Menu menu) {
  24. // Inflate the menu; this adds items to the action bar if it is present.
  25. getMenuInflater().inflate(R.menu.activity_main, menu);
  26. return true;
  27. }
  28. @Override
  29. public boolean onOptionsItemSelected(MenuItem item) {
  30. switch (item.getItemId()) {
  31. case R.id.action_refresh:
  32. Toast.makeText(this, "Menu Item refresh selected",
  33. Toast.LENGTH_SHORT).show();
  34. break;
  35. case R.id.action_about:
  36. Toast.makeText(this, "Menu Item about selected", Toast.LENGTH_SHORT)
  37. .show();
  38. break;
  39. case R.id.action_edit:
  40. Toast.makeText(this, "Menu Item edit selected", Toast.LENGTH_SHORT)
  41. .show();
  42. break;
  43. case R.id.action_search:
  44. Toast.makeText(this, "Menu Item search selected",
  45. Toast.LENGTH_SHORT).show();
  46. break;
  47. case R.id.action_help:
  48. Toast.makeText(this, "Menu Item  settings selected",
  49. Toast.LENGTH_SHORT).show();
  50. break;
  51. default:
  52. break;
  53. }
  54. return super.onOptionsItemSelected(item);
  55. }
  56. }
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  2. <item
  3. android:id="@+id/menu_settings"
  4. android:orderInCategory="100"
  5. android:showAsAction="never"
  6. android:title="settings"/>
  7. <item
  8. android:id="@+id/action_refresh"
  9. android:icon="@drawable/navigation_refresh"
  10. android:orderInCategory="101"
  11. android:showAsAction="ifRoom|withText"
  12. android:title="refresh"/>
  13. <item
  14. android:id="@+id/action_about"
  15. android:icon="@drawable/action_about"
  16. android:orderInCategory="101"
  17. android:showAsAction="ifRoom"
  18. android:title="about"/>
  19. <item
  20. android:id="@+id/action_search"
  21. android:icon="@drawable/action_search"
  22. android:orderInCategory="103"
  23. android:showAsAction="ifRoom"/>
  24. <item
  25. android:id="@+id/action_edit"
  26. android:icon="@android:drawable/ic_menu_edit"
  27. android:orderInCategory="105"
  28. android:showAsAction="ifRoom"
  29. android:title="edit"/>
  30. <item
  31. android:id="@+id/action_help"
  32. android:showAsAction="always"
  33. android:title="help"/>
  34. <item
  35. android:id="@+id/action_email"
  36. android:icon="@android:drawable/ic_dialog_email"
  37. android:orderInCategory="106"
  38. android:showAsAction="ifRoom"
  39. android:title="email"/>
  40. </menu>

onCreateOptionsMenu()方法用来加载menu文件夹中定义的xml文件,用来显示action bar。onOptionsItemSelected()方法用来加入点击事件。

效果图:

Android ActionBar 一步一步分析 (转)        Android ActionBar 一步一步分析 (转)

左图的效果我们看到只能显示两个action button,由于屏幕的空间有限,其他的action
button会被隐藏。横屏的时候我们可以显示4个,还有3个被隐藏起来了。当我们按手机上的更多键时可以显示出来关于action
button的文字信息,一定要在item标签中加入title属性。

android:showAsAction="ifRoom"ifRomm表示有空间的时候显示。

android:showAsAction="always"表示总是显示

android:showAsAction="ifRoom|withText"有空间的时候同时显示title标题

其他属性可以自己试试。

2.显示3个点的更多action button

从上面的代码我们知道,即使我们横屏也显示不出全部action button。我们可以加入3个点的action
button来用下拉显示的方式,显示跟多的action
button。在网上的信息得知,只要你的手机有menu键actionbar就不会显示3个点的更多或者说3个点的menu按钮。从上面的代码我们知
道,即使我们横屏也显示不出全部action button。我们可以加入3个点的action
button来用下拉显示的方式,显示跟多的action
button。在网上的信息得知,只要你的手机有menu键actionbar就不会显示3个点的更多或者说3个点的menu按钮。

  1. private void getOverflowMenu() {
  2. try {
  3. ViewConfiguration config = ViewConfiguration.get(this);
  4. Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
  5. if(menuKeyField != null) {
  6. menuKeyField.setAccessible(true);
  7. menuKeyField.setBoolean(config, false);
  8. }
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }
  12. }

在onCreat()方法中调用这个方法可以显示3个点的menu按钮。下图是按下3个点的action button的效果


Android ActionBar 一步一步分析 (转)

代码:Demo_ActionBar3dot

动态action button

用到了MenuItem 类的,setActionView()和collapseActionView()这两个方法。 这个例子的效果是当我们点击refresh action button的时候会显示进度条。

  1. package com.example.demo_actionbar;
  2. import android.app.ActionBar;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.AsyncTask;
  6. import android.os.Bundle;
  7. import android.view.KeyEvent;
  8. import android.view.Menu;
  9. import android.view.MenuItem;
  10. import android.widget.EditText;
  11. import android.widget.ProgressBar;
  12. import android.widget.TextView;
  13. import android.widget.TextView.OnEditorActionListener;
  14. import android.widget.Toast;
  15. public class MainActivity extends Activity {
  16. private MenuItem menuItem = null;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. }
  22. @Override
  23. public boolean onCreateOptionsMenu(Menu menu) {
  24. // Inflate the menu; this adds items to the action bar if it is present.
  25. getMenuInflater().inflate(R.menu.activity_main, menu);
  26. return true;
  27. }
  28. @Override
  29. public boolean onOptionsItemSelected(MenuItem item) {
  30. // TODO Auto-generated method stub
  31. switch (item.getItemId()) {
  32. case R.id.action_refresh:
  33. menuItem = item;
  34. menuItem.setActionView(R.layout.progressbar);
  35. TestTask task = new TestTask();
  36. task.execute("test");
  37. break;
  38. case R.id.action_about:
  39. Toast.makeText(this, "Menu Item about selected", Toast.LENGTH_SHORT)
  40. .show();
  41. break;
  42. default:
  43. break;
  44. }
  45. return super.onOptionsItemSelected(item);
  46. }
  47. private class TestTask extends AsyncTask<String, Void, String> {
  48. @Override
  49. protected String doInBackground(String... params) {
  50. // Simulate something long running
  51. try {
  52. Thread.sleep(2000);
  53. } catch (InterruptedException e) {
  54. e.printStackTrace();
  55. }
  56. return null;
  57. }
  58. @Override
  59. protected void onPostExecute(String result) {
  60. menuItem.collapseActionView(); // 这个方法需要 API 14 以上
  61. menuItem.setActionView(null);
  62. }
  63. };
  64. }

Actionbar之spinner实现drop-down Navigation

1.首先需要一个SpinnerAdapter设置下拉item的内容和显示的layout

2.实现ActionBar.OnNavigationListener这个接口,接口中有点击item的事件
3.设置navigation mode例如
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
4.用 setListNavigationCallbacks()方法来实现下拉选项,例如
actionBar.setListNavigationCallbacks(mSpinnerAdapter, mNavigationCallback);

效果图:

Android ActionBar 一步一步分析 (转)

代码:

  1. package in.wptrafficanalyzer.actionbardropdownnavigation;
  2. import android.app.ActionBar;
  3. import android.app.ActionBar.OnNavigationListener;
  4. import android.app.Activity;
  5. import android.os.Bundle;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.Toast;
  8. public class MainActivity extends Activity {
  9. /** An array of strings to populate dropdown list */
  10. String[] actions = new String[] { "Bookmark", "Subscribe", "Share" };
  11. /** Called when the activity is first created. */
  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);
  16. /** Create an array adapter to populate dropdownlist */
  17. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  18. getBaseContext(),
  19. android.R.layout.simple_spinner_dropdown_item, actions);
  20. /** Enabling dropdown list navigation for the action bar */
  21. getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
  22. /** Defining Navigation listener */
  23. ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
  24. @Override
  25. public boolean onNavigationItemSelected(int itemPosition,
  26. long itemId) {
  27. Toast.makeText(getBaseContext(),
  28. "You selected : " + actions[itemPosition],
  29. Toast.LENGTH_SHORT).show();
  30. return false;
  31. }
  32. };
  33. /**
  34. * Setting dropdown items and item navigation listener for the actionbar
  35. */
  36. getActionBar().setListNavigationCallbacks(adapter, navigationListener);
  37. }
  38. }

代码下载:Demo_ActionBarDropdownNavigation

Action Bar之Contextual action bar

Android ActionBar 一步一步分析 (转)    Android ActionBar 一步一步分析 (转)

两张图,前一张是没有显示contextual action bar 的时候,后面那张是用户长点击EditText显示contextual
action bar的效果。contextual action bar 也能加入menu item 并对menu item
进行监听。在contextual action bar 中显示 menu item 需要在 /res/menu/ 文件夹中加入布局文件。

代码:

  1. package com.example.demo_actionbarcontextual;
  2. import com.example.demo_actionbarcontextual.R;
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.ActionMode;
  6. import android.view.Menu;
  7. import android.view.MenuInflater;
  8. import android.view.MenuItem;
  9. import android.view.View;
  10. import android.widget.Toast;
  11. public class MainActivity extends Activity {
  12. protected Object mActionMode;
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. View view = findViewById(R.id.myView);
  18. // 对EditText设置长点击事件,用来显示 contextual action bar
  19. view.setOnLongClickListener(new View.OnLongClickListener() {
  20. public boolean onLongClick(View view) {
  21. if (mActionMode != null) {
  22. return false;
  23. }
  24. // Start the Contextual Action Bar using the ActionMode.Callback defined above
  25. mActionMode = MainActivity.this
  26. .startActionMode(mActionModeCallback);
  27. view.setSelected(true);
  28. return true;
  29. }
  30. });
  31. }
  32. @Override
  33. public boolean onCreateOptionsMenu(Menu menu) {
  34. MenuInflater inflater = getMenuInflater();
  35. inflater.inflate(R.menu.mainmenu, menu);
  36. return true;
  37. }
  38. @Override
  39. public boolean onOptionsItemSelected(MenuItem item) {
  40. Toast.makeText(this, "Just a test", Toast.LENGTH_SHORT).show();
  41. return true;
  42. }
  43. private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
  44. // Called when the action mode is created; startActionMode() was called
  45. public boolean onCreateActionMode(ActionMode mode, Menu menu) {
  46. // Inflate a menu resource providing context menu items
  47. MenuInflater inflater = mode.getMenuInflater();
  48. // R.menu.contextual 是 contextual action bar 的布局文件, 在 /res/menu/ 文件夹下
  49. inflater.inflate(R.menu.contextual, menu);
  50. return true;
  51. }
  52. // Called each time the action mode is shown. Always called after
  53. // onCreateActionMode, but
  54. // may be called multiple times if the mode is invalidated.
  55. public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
  56. return false; // Return false if nothing is done
  57. }
  58. // 当用户点击 contextual action bar 的 menu item 的时候产生点击事件
  59. public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
  60. switch (item.getItemId()) {
  61. case R.id.toast:
  62. Toast.makeText(MainActivity.this, "Selected menu",
  63. Toast.LENGTH_LONG).show();
  64. mode.finish(); // 关闭 contextual action bar
  65. return true;
  66. default:
  67. return false;
  68. }
  69. }
  70. // Called when the user exits the action mode
  71. public void onDestroyActionMode(ActionMode mode) {
  72. mActionMode = null;
  73. }
  74. };
  75. }

下载:Demo_ActionBarContextual

Action bar 之 navigation tabs

左图是竖直屏幕的效果,右图是横屏的效果:

Android ActionBar 一步一步分析 (转)  Android ActionBar 一步一步分析 (转)

代码:

  1. package de.arvidg.exampleactionbartabs;
  2. import android.app.ActionBar;
  3. import android.app.ActionBar.Tab;
  4. import android.app.Activity;
  5. import android.app.Fragment;
  6. import android.app.FragmentTransaction;
  7. import android.content.Context;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.view.Menu;
  11. import android.view.MenuInflater;
  12. import android.view.MenuItem;
  13. import android.widget.Toast;
  14. public class StartActivity extends Activity {
  15. public static Context appContext;
  16. /** Called when the activity is first created. */
  17. @Override
  18. public void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.main);
  21. appContext = getApplicationContext();
  22. // ActionBar
  23. ActionBar actionbar = getActionBar();
  24. // 设置action bar 的 navigation mode
  25. actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
  26. // 添加 action bar 的 tabs
  27. ActionBar.Tab PlayerTab = actionbar.newTab().setText("Fragment A");
  28. ActionBar.Tab StationsTab = actionbar.newTab().setText("Fragment B");
  29. // 实例化 fragment action bar 是用 fragment 来显示的
  30. Fragment PlayerFragment = new AFragment();
  31. Fragment StationsFragment = new BFragment();
  32. // 对 tabs 设置监听事件
  33. PlayerTab.setTabListener(new MyTabsListener(PlayerFragment));
  34. StationsTab.setTabListener(new MyTabsListener(StationsFragment));
  35. // 最后把 tabs 加入监听事件
  36. actionbar.addTab(PlayerTab);
  37. actionbar.addTab(StationsTab);
  38. }
  39. @Override
  40. public boolean onCreateOptionsMenu(Menu menu) {
  41. MenuInflater inflater = getMenuInflater();
  42. inflater.inflate(R.menu.main, menu);
  43. return true;
  44. }
  45. @Override
  46. public boolean onOptionsItemSelected(MenuItem item) {
  47. switch (item.getItemId()) {
  48. case R.id.menuitem_search:
  49. Toast.makeText(appContext, "search", Toast.LENGTH_SHORT).show();
  50. return true;
  51. case R.id.menuitem_add:
  52. Toast.makeText(appContext, "add", Toast.LENGTH_SHORT).show();
  53. return true;
  54. case R.id.menuitem_share:
  55. Toast.makeText(appContext, "share", Toast.LENGTH_SHORT).show();
  56. return true;
  57. case R.id.menuitem_feedback:
  58. Toast.makeText(appContext, "feedback", Toast.LENGTH_SHORT).show();
  59. return true;
  60. case R.id.menuitem_about:
  61. Toast.makeText(appContext, "about", Toast.LENGTH_SHORT).show();
  62. return true;
  63. case R.id.menuitem_quit:
  64. Toast.makeText(appContext, "quit", Toast.LENGTH_SHORT).show();
  65. return true;
  66. }
  67. return false;
  68. }
  69. // @Override
  70. // protected void onSaveInstanceState(Bundle outState) {
  71. // super.onSaveInstanceState(outState);
  72. // outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
  73. // }
  74. }
  75. // 实例化 tabs 的监听类
  76. class MyTabsListener implements ActionBar.TabListener {
  77. public Fragment fragment;
  78. // 传入监听的 tab 的 fragment
  79. public MyTabsListener(Fragment fragment) {
  80. this.fragment = fragment;
  81. }
  82. // 重复两次以上点击 tab
  83. @Override
  84. public void onTabReselected(Tab tab, FragmentTransaction ft) { // ft 用来控制 fragment
  85. Toast.makeText(StartActivity.appContext, "Reselected!",
  86. Toast.LENGTH_SHORT).show();
  87. }
  88. // 就点击一次
  89. @Override
  90. public void onTabSelected(Tab tab, FragmentTransaction ft) {
  91. ft.replace(R.id.fragment_container, fragment);
  92. }
  93. // 不点击
  94. @Override
  95. public void onTabUnselected(Tab tab, FragmentTransaction ft) {
  96. ft.remove(fragment);
  97. }

Action bar 之 ShareActionProvider

1.首先要在menu布局文件的item标签中加入
android:actionProviderClass="android.widget.ShareActionProvider"
2.得到ShareActionProvider的实例
provider = (ShareActionProvider) menu.findItem(R.id.menu_share)
.getActionProvider();
3.设置Intent
效果图:

Android ActionBar 一步一步分析 (转)

代码:

  1. package com.example.demo_shareactionprovider;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. import android.widget.ShareActionProvider;
  8. public class MainActivity extends Activity {
  9. ShareActionProvider provider = null;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. }
  15. @Override
  16. public boolean onCreateOptionsMenu(Menu menu) {
  17. // Inflate the menu; this adds items to the action bar if it is present.
  18. getMenuInflater().inflate(R.menu.activity_main, menu);
  19. // Get the ActionProvider
  20. provider = (ShareActionProvider) menu.findItem(R.id.menu_share)
  21. .getActionProvider();
  22. // Initialize the share intent
  23. Intent intent = new Intent(Intent.ACTION_SEND);
  24. intent.setType("text/plain");
  25. intent.putExtra(Intent.EXTRA_TEXT, "Text I want to share");
  26. provider.setShareIntent(intent);
  27. return true;
  28. }
  29. @Override
  30. public boolean onOptionsItemSelected(MenuItem item) {
  31. switch (item.getItemId()) {
  32. case R.id.menu_share:
  33. break;
  34. default:
  35. break;
  36. }
  37. return super.onOptionsItemSelected(item);
  38. }
  39. }

/res/menu/activity_main.xml

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  2. <item
  3. android:id="@+id/menu_share"
  4. android:actionProviderClass="android.widget.ShareActionProvider"
  5. android:showAsAction="ifRoom"
  6. android:title="Share"/>
  7. <item
  8. android:id="@+id/item1"
  9. android:icon="@android:drawable/ic_menu_call"
  10. android:showAsAction="ifRoom"
  11. android:title="">
  12. </item>
  13. </menu>

The ShareActionProvider now handles all user interaction with the item
and you do not need to handle click events from the
onOptionsItemSelected() callback method.
上面是官方文档上给的: 就是说无需在onOptionsItemSelected()这个回调方法中再去处理了。

代码:Demo_ShareActionProvider

Action Bar 之 style

你可以用android的style和theme来自定义action bar的风格和主题

android:windowActionBarOverlay
这个属性是用来定义actionbar和其下方视图的位置关系的。默认false,当设置成true时,表示activity layout
就是说你的下方的视图将覆盖整个屏幕。这样设置的好处就是说,当你隐藏action bar的时候,视图不会改变位置。当我们把action
bar设置成半透明的时候,我们也能看见其下面的内容,这样的界面对用户来说更加有好。

<SomeView  android:layout_marginTop="?android:attr/actionBarSize" />

上面这个属性可以设置activity layout距离屏幕顶端的距离。这样设置可以防止被action bar覆盖下方内容。

下面是一个简单的关于如何改变antion bar 字体、分割图片、背景的一个style

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <!-- the theme applied to the application or activity -->
  4. <style name="CustomActivityTheme" parent="@android:style/Theme.Holo">
  5. <item name="android:actionBarTabTextStyle">@style/CustomTabTextStyle</item>
  6. <item name="android:actionBarDivider">@drawable/ab_divider</item>
  7. <item name="android:actionBarItemBackground">@drawable/ab_item_background</item>
  8. </style>
  9. <!-- style for the action bar tab text -->
  10. <style name="CustomTabTextStyle" parent="@android:style/TextAppearance.Holo">
  11. <item name="android:textColor">#2456c2</item>
  12. </style>
  13. </resources>

能设置的关于action bar的风格(style)的属性有:

android:actionButtonStyle // Defines a style resource for the action item buttons.

android:actionBarItemBackground //Defines a drawable resource for each action item's background. (Addedin API level 14.)

android:itemBackground // Defines a drawable resource for each overflow menu item's background.

android:actionBarDivider // Defines a drawable resource for the divider between action items.(Added in API level 14.)

android:actionMenuTextColor //Defines a color for text that appears in an action item.

android:actionMenuTextAppearance //Defines a style resource for text that appears in an action item.

android:actionBarWidgetTheme //Defines a theme resource for widgets
that are inflated into the actionbar as action views. (Added in API
level 14.)

下面的网址是源码中的styles.xml和themes.xml文件,包含了系统中所有的样式和主题。根据自己的需要可以改变action bar的显示风格。

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

例子1:怎么改变tab的字体大小、字体颜色等

    1. <pre name="code" class="html">在themes.xml文件中关于tab的属性有:</pre><br>
    2. <br>
    3. <pre></pre>
    4. <pre name="code" class="html">android:actionBarTabStyle // Defines a style resource for tabs in the action bar.</pre>android:actionBarTabBarStyle // Defines a style resource for the thin bar that appears below the navigation tabs.<br>
    5. android:actionBarTabTextStyle //Defines a style resource for text in the navigation tabs.
    6. <p><br>
    7. </p>
    8. <p>在themes.xml文件中找到:</p>
    9. <p></p>
    10. <p></p>
    11. <pre name="code" class="html"><itemnameitemname="actionBarTabTextStyle">@style/Widget.Holo.Light.ActionBar.TabText</item></pre>
    12. <p></p>
    13. <p>在style.xml文件中找到</p>
    14. <pre name="code" class="html"><style name="Widget.Holo.Light.ActionBar.TabText" parent="Widget.Holo.ActionBar.TabText">
    15. </pre>
    16. <p><br>
    17. </p>
    18. 在style.xml文件中通过Widget.Holo.ActionBar.TabText,我们可以找到下面<br>
    19. <pre name="code" class="html"><style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText">
    20. <item name="android:textAppearance">@style/TextAppearance.Holo.Medium</item>
    21. <item name="android:textColor">?android:attr/textColorPrimary</item>
    22. <item name="android:textSize">12sp</item>
    23. <item name="android:textStyle">bold</item>
    24. <item name="android:textAllCaps">true</item>
    25. <item name="android:ellipsize">marquee</item>
    26. <item name="android:maxLines">2</item>
    27. </style>
    28. </pre>
    29. <p><br>
    30. </p>
    31. <p>下面是我们工程中styles.xml的内容:<br>
    32. </p>
    33. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    34. <resources xmlns:android="http://schemas.android.com/apk/res/android">
    35. <style name="CustomActivityThemo" parent="@android:style/Theme.Holo.Light">
    36. <item name="android:actionBarTabTextStyle">@style/CustomTabTextStyle</item>
    37. </style>
    38. <style name="CustomTabTextStyle" parent="@android:style/Widget.ActionBar.TabText">
    39. <item name="android:textSize">25sp</item>
    40. <item name="android:textColor">#FF0000</item>
    41. <item name="android:textStyle">italic|bold</item>
    42. </style>
    43. </resources>
    44. </pre><br>
    45. 我们必须在manifest.xml文件中的activity标签中设置<br>
    46. <br>
    47. <p></p>
    48. <pre name="code" class="html"><activity
    49. <span style="white-space:pre">  </span>android:theme="@style/CustomActivityThemo" ></pre><pre name="code" class="html"><span style="white-space:pre">    </span>....
    50. </activity>
    51. </pre>
    52. <p></p>
    53. <p><br>
    54. </p>
    55. 代码:Demo_ActionBarTabsColor<br>
    56. <p><br>
    57. </p>
    58. <p>例子2:改变action bar中tab的indicator(下面的那条横线)的颜色<br>
    59. styles.xml文件内容:</p>
    60. <p><br>
    61. </p>
    62. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    63. <resources xmlns:android="http://schemas.android.com/apk/res/android">
    64. <!-- the theme applied to the application or activity -->
    65. <style name="CustomActivityTheme" parent="@android:style/Theme.Holo.Light">
    66. <item name="android:actionBarTabTextStyle">@style/CustomTabTextStyle</item>
    67. <item name="android:actionBarTabBarStyle">@android:color/holo_orange_dark</item>
    68. <item name="android:actionBarTabStyle">@style/ActionBarTabStyle.Example</item>
    69. </style>
    70. <!-- style for the action bar tab text -->
    71. <style name="CustomTabTextStyle" parent="@android:style/TextAppearance.Holo">
    72. <item name="android:textColor">#2456c2</item>
    73. </style>
    74. <style name="ActionBarTabStyle.Example" parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
    75. <item name="android:background">@drawable/tab_indicator_ab_example</item>
    76. </style>
    77. </resources>
    78. </pre><br>
    79. <br>
    80. <p></p>
    81. <p>android:background这个属性定义了tab的显示风格,对应的是一个xml文件不是图片<br>
    82. </p>
    83. <p></p>
    84. <p><br>
    85. </p>
    86. <p><br>
    87. </p>
    88. <p>tab_indicator_ab_example.xml文件的内容:</p>
    89. <p></p>
    90. <pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
    91. <selector xmlns:android="http://schemas.android.com/apk/res/android">
    92. <!-- Non focused states -->
    93. <item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false" android:state_selected="false"/>
    94. <item android:drawable="@drawable/tab_selected_example" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>
    95. <!-- Focused states -->
    96. <item android:drawable="@drawable/tab_unselected_focused_example" android:state_focused="true" android:state_pressed="false" android:state_selected="false"/>
    97. <item android:drawable="@drawable/tab_selected_focused_example" android:state_focused="true" android:state_pressed="false" android:state_selected="true"/>
    98. <!-- Pressed -->
    99. <!-- Non focused states -->
    100. <item android:drawable="@drawable/tab_unselected_pressed_example" android:state_focused="false" android:state_pressed="true" android:state_selected="false"/>
    101. <item android:drawable="@drawable/tab_selected_pressed_example" android:state_focused="false" android:state_pressed="true" android:state_selected="true"/>
    102. <!-- Focused states -->
    103. <item android:drawable="@drawable/tab_unselected_pressed_example" android:state_focused="true" android:state_pressed="true" android:state_selected="false"/>
    104. <item android:drawable="@drawable/tab_selected_pressed_example" android:state_focused="true" android:state_pressed="true" android:state_selected="true"/>
    105. </selector>
    106. </pre><pre name="code" class="html"></pre>代码:Demo_ActionBarTabsColor<p></p><p>参考文献:</p><p>http://www.vogella.com/articles/AndroidActionBar/article.htmlhttp://developer.android.com/guide/topics/ui/actionbar.html</p><p></p>
上一篇:HTML&CSS基础-边框简写属性


下一篇:IDEA使用(1)intellIJ idea 配置 svn