在Android3.0以後,Google對UI導航設計上進行了一系列的改革,其中有一個很是好用的新功能就是引入的ActionBar,他用於取代3.0以前的標題欄,並提供更爲豐富的導航效果。html
1、添加ActionBarjava
一、不須要導入ActionBar,由於在android3.0或者以上版本中,ActionBar已經默認的包含在Activity中
二、在Android3.0的默認主題「holographic」中,已經創造了ActionBar
三、當android:minSdkVersion 或者 android:targetSdkVersion 屬性被設置成11或者更高時,應用會被認爲是Android3.0版本(默認含有ActionBar)android
2、隱藏ActionBar數組
一、咱們能夠經過把主題設置爲Theme.Holo.NoActionBar爲一個Activity去除掉ActionBar。 app
1
|
<
activity
android:theme
=
"@android:style/Theme.Holo.NoActionBar"
>
|
二、咱們也能夠經過在代碼中調用show()或者hide()方法來相應的顯示或者隱藏ActionBaride
三、在咱們使用actionBar.hide();方法是系統默認會將ActionBar佔用的空間分配給界面,此時顯示的界面將會從新繪製。
一樣調用actionBar.show();時也會從新繪製界面。若是咱們一個程序須要頻繁的顯示或者隱藏ActionBar的話,這樣
就不會有良好的效果。Google提供給一個屬性可讓ActionBar浮在界面上,固然你可讓ActionBar的背景爲透明,
這樣會有良好的體驗效果。佈局
3、添加ActionBar的Itemthis
一、經過程序動態佈局spa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
package
com.xys.actionbar;
import
android.os.Bundle;
import
android.app.ActionBar;
import
android.app.Activity;
import
android.view.Menu;
import
android.view.MenuItem;
public
class
MainActivity
extends
Activity {
ActionBar actionBar;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar=getActionBar();
actionBar.show();
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
super
.onCreateOptionsMenu(menu);
//添加菜單項
MenuItem add=menu.add(
0
,
0
,
0
,
"add"
);
MenuItem del=menu.add(
0
,
0
,
0
,
"del"
);
MenuItem save=menu.add(
0
,
0
,
0
,
"save"
);
//綁定到ActionBar
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
del.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
save.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return
true
;
}
}
|
效果如圖:設計
二、經過Menu.xml文件佈局
menu/menu.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<menu xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<item
android:id=
"@+id/item1"
android:orderInCategory=
"1"
android:showAsAction=
"ifRoom|withText"
android:title=
"@string/save"
/>
<item
android:id=
"@+id/item1"
android:orderInCategory=
"2"
android:showAsAction=
"ifRoom|withText"
android:title=
"@string/edit"
/>
</menu>
|
程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
ActionBarXMLActivity
extends
Activity {
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.optionsmenu, menu);
return
true
;
}
}
|
效果和上面同樣
4、關於菜單項過多
當菜單項過多時,Android會分兩種狀況進行處理:
一、手機有MENU實體鍵:則按下Menu鍵後會顯示剩餘菜單項
二、手機沒有MENU實體鍵:則會在最左邊顯示一個Action OverFlow按鈕,按下後會顯示剩餘項菜單,如圖:
5、使用帶字的Action Item
一、Action item 默認格式是若是菜單項含字和圖標的話,只顯示圖標
二、若是想要顯示字的效果,在xml裏以下設置:android:showAsAction="ifRoom|withText" 或者在代碼裏調用setShowAsAction():setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
6、ActionBar的單擊事件
一、ActionBar中一個菜單項(即Action item)的觸發像之前版本中的活動菜單回調方法(onOptionsItemSelected())同樣。
二、當用戶選擇一個Fragment的菜單項時,首先會調用Activity的onOptionsItemSelected()方法,若是該方法返回false,則調用Fragment實現的onOptionsItemSelected()方
法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public
boolean
onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch
(item.getItemId()) {
case
R.id.menu_save:
Toast.makeText(getApplicationContext(),
"menu_save"
,
0
).show();
break
;
case
android.R.id.home:
Intent intent =
new
Intent(
this
, MainActivity.
class
);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Toast.makeText(getApplicationContext(),
"android.R.id.home"
,
0
)
.show();
break
;
default
:
break
;
}
return
super
.onOptionsItemSelected(item);
}
|
7、應用的圖標
一、默認狀況下,應用圖標在ActionBar的左側
二、當用戶點擊應用bar的時候,系統會調用你的Activity裏面的onOptionsItemSelected() 方法裏面的Android.R.id.Home ID(你的主ID)裏定義的事件。咱們能夠重寫這個方法,添加一個條件執行該行爲:讓它跳轉到這個應用的主Activity而不是返回的主屏幕。
三、若是選擇返回應用的主activity,最好的方式是在建立的Intent中添加FLAG_ACTIVITY_CLEAR_TOP這個標籤。
使用這個FLAG_ACTIVITY_CLEAR_TOP標籤,若是應用的主Activity已經在activity棧中存在,全部在其上的activity都會被銷燬,而後主activity會到棧頂,而不用建立主Activity的的新實例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Override
public
boolean
onOptionsItemSelected(MenuItem item)
{
switch
(item.getItemId())
{
case
android.R.id.home:
Intent intent =
new
Intent(
this
, MainActivity.
class
);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return
true
;
default
:
return
super
.onOptionsItemSelected(item);
}
}
|
當咱們想實現用戶點擊ActionBar 圖標後返回前一個activity,能夠經過在Actionbar設置setDisplayHomeAsUpEnabled(true) 來實現。如圖:
8、添加活動視圖
一、ActionBar中還能夠添加不少其餘的視圖
咱們也能夠添加一個視圖做爲一個Action Item.咱們能夠經過在xml元素的android:actionLayout屬性制定咱們但願現實佈局資源的ID(例如@layout/mysearchview)
咱們能夠選擇添加android:actionViewClass屬性分配與徹底限定的類名描述咱們想要顯示的視圖(例如android.widget.SearchView)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package
com.xys.actionbar;
import
android.app.ActionBar;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.Menu;
import
android.view.MenuInflater;
public
class
MainActivity
extends
Activity {
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected
void
onStart() {
super
.onStart();
ActionBar actionBar =
this
.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(
true
);
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return
true
;
}
}
|
這樣咱們就添加了一個Search的視圖,效果以下:
二、其餘Item
ActionBar的Item會分有好幾個種類,分別有
1).普通類型(帶圖片帶文字)。
2).分享類型。
3).可拓展類型。
4).列表類型。
如圖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<
item
android:id
=
"@+id/menu_collapse"
android:actionLayout
=
"@layout/collapsibleview"
android:icon
=
"@drawable/search"
android:showAsAction
=
"ifRoom|collapseActionView"
android:title
=
"@string/menu_search"
>
</
item
>
<
item
android:id
=
"@+id/menu_share"
android:actionProviderClass
=
"android.widget.ShareActionProvider"
android:enabled
=
"true"
android:showAsAction
=
"ifRoom"
android:title
=
"@string/menu_share"
/>
<
item
android:id
=
"@+id/menu_settings"
android:icon
=
"@drawable/save"
android:orderInCategory
=
"100"
android:title
=
"@string/menu_settings"
>
</
item
>
<
item
android:id
=
"@+id/menu_save"
android:icon
=
"@drawable/save"
android:showAsAction
=
"ifRoom|withText"
android:title
=
"@string/menu_save"
>
<
menu
>
<
item
android:id
=
"@+id/action_sort_size"
android:icon
=
"@android:drawable/ic_menu_sort_by_size"
android:onClick
=
"onSort"
/>
<
item
android:id
=
"@+id/action_sort_alpha"
android:icon
=
"@android:drawable/ic_menu_sort_alphabetically"
android:onClick
=
"onSort"
/>
</
menu
>
</
item
>
|
menu_save Item 就是一個最普通的帶文字帶圖片的Item。
可否顯示在ActionBar的Item主要看android:showAsAction="ifRoom|withText"這個屬性。
看menu_sitting 就永遠不會顯示出來,只有在按menu時候會顯示。谷歌文檔中提供android:showAsAction總共有五個屬性。
never:永遠不會顯示。只會在溢出列表中顯示。
ifRoom:會顯示在Item中,可是若是已經有4個或者4個以上的Item時會隱藏在溢出列表中。
always:不管是否溢出,總會顯示。
withText:Title會顯示。
collapseActionView:可拓展的Item。
三、可分享的Item
看上面代碼片斷 menu_share 按鈕就是一個可分享的Item。
android:actionProviderClass="android.widget.ShareActionProvider"表示這個Item是個分享Item
在java代碼中進行實現:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public
boolean
onCreateOptionsMenu(Menu menu) {
// 添加分享按鈕的事件
// 4.0如下沒有ShareActionProvider
MenuItem menuItem_share = menu.findItem(R.id.menu_share);
// Get the provider and hold onto it to set/change the share intent.
mShareActionProvider = (ShareActionProvider) menuItem_share
.getActionProvider();
// If you use more than one ShareActionProvider, each for a different
// action,
// use the following line to specify a unique history file for each one.
// mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");
// Set the default share intent
mShareActionProvider.setShareIntent(getDefaultShareIntent());
}
private
Intent getDefaultShareIntent() {
// TODO Auto-generated method stub
Log.i(TAG,
"getDefaultShareIntent"
);
Intent intent =
new
Intent(Intent.ACTION_SEND);
intent.setType(
"text/plain"
);
intent.putExtra(Intent.EXTRA_SUBJECT,
"小清新短信閃"
);
intent.putExtra(Intent.EXTRA_TEXT,
"小清新短信閃 1.0"
);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return
intent;
}
|
效果如圖:
四、可拓展的Item
看到那個放大鏡了,就是一個可拓展試的Item,看xml 中的 menu_collapse。
他有倆個屬性是android:actionLayout="@layout/collapsibleview" android:showAsAction="ifRoom|collapseActionView"
android:actionLayout="@layout/collapsibleview" 是點item後拓展成的View
android:showAsAction="collapseActionView"表明他是一個可拓展的Item
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Button btnn;
EditText editText;
private
ShareActionProvider mShareActionProvider;
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
// 給可摺疊的view上的控件添加事件
LinearLayout viewGroup = (LinearLayout) menu.findItem(
R.id.menu_collapse).getActionView();
btnn = (Button) viewGroup.findViewById(R.id.colla_btn);
editText = (EditText) viewGroup.findViewById(R.id.colla_edit);
btnn.setOnClickListener(
new
OnClickListener() {
public
void
onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
editText.getText() +
"~"
,
0
).show();
}
});
}
|
可拓展的Item同時還支持一個拓展事件。只有在4.0之後的Api提供:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
MenuItem menuItem = menu.findItem(R.id.menu_collapse);
menuItem.setOnActionExpandListener(
new
OnActionExpandListener() {
@Override
public
boolean
onMenuItemActionExpand(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionExpand"
,
0
).show();
return
true
;
}
@Override
public
boolean
onMenuItemActionCollapse(MenuItem item) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"onMenuItemActionCollapse"
,
0
).show();
return
true
;
}
});
|
五、自定義View
1
2
3
4
5
6
7
8
9
10
11
12
|
mCustomView = getLayoutInflater().inflate(
R.layout.action_bar_display_options_custom,
null
);
mCustomView.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),
"自定義view"
,
0
).show();
}
});
actionBar.setCustomView(mCustomView,
new
ActionBar.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
|
9、ActionBar標籤
一、ActionBar能夠現實選項卡供用戶切換瀏覽該Activity中不一樣的Fragment
二、每一個標籤均可以是一個圖標或文本標題
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
package
com.xys.actionbar;
import
android.app.ActionBar;
import
android.app.ActionBar.Tab;
import
android.app.Activity;
import
android.app.Fragment;
import
android.app.FragmentTransaction;
import
android.os.Bundle;
public
class
MainActivity
extends
Activity
{
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar bar = getActionBar();
//設置爲Tab模式
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//新建2個Tab
ActionBar.Tab tabA = bar.newTab().setText(
"A Tab"
);
ActionBar.Tab tabB = bar.newTab().setText(
"B Tab"
);
//綁定到Fragment
Fragment fragmentA =
new
AFragmentTab();
Fragment fragmentB =
new
BFragmentTab();
tabA.setTabListener(
new
MyTabsListener(fragmentA));
tabB.setTabListener(
new
MyTabsListener(fragmentB));
bar.addTab(tabA);
bar.addTab(tabB);
}
protected
class
MyTabsListener
implements
ActionBar.TabListener
{
private
Fragment fragment;
public
MyTabsListener(Fragment fragment)
{
this
.fragment = fragment;
}
@Override
public
void
onTabSelected(Tab tab, FragmentTransaction ft)
{
ft.add(R.id.fragment_place, fragment,
null
);
}
@Override
public
void
onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public
void
onTabUnselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
}
}
|
AB Tab頁面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package
com.xys.actionbar;
import
android.app.Fragment;
import
android.os.Bundle;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
public
class
AFragmentTab
extends
Fragment
{
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
return
inflater.inflate(R.layout.fragment_a, container,
false
);
}
}
|
佈局:
activity_main.xml:至關於容器
1
2
3
4
5
6
7
8
9
10
11
12
|
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:orientation
=
"vertical"
>
<
LinearLayout
android:id
=
"@+id/fragment_place"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
>
</
LinearLayout
>
</
LinearLayout
>
|
fragment_a.xml:每一個fragment的佈局:
1
2
3
4
5
6
7
8
9
10
11
12
|
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:orientation
=
"vertical"
>
<
LinearLayout
android:id
=
"@+id/fragment_a"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
>
</
LinearLayout
>
</
LinearLayout
>
|
顯示效果如圖:
九-一、下拉模式
前面講到了
1
|
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
|
此次咱們使用下拉模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
public class ActionBarTestActivity extends Activity {
/** Called when the activity is first created. */
Button button1,button2;
ActionBar actionBar;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
actionBar=getActionBar();
// 生成一個SpinnerAdapter
SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.student, android.R.layout.simple_spinner_dropdown_item);
// 將ActionBar的操做模型設置爲NAVIGATION_MODE_LIST
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
// 爲ActionBar設置下拉菜單和監聽器
actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());
class DropDownListenser implements OnNavigationListener
{
// 獲得和SpinnerAdapter裏一致的字符數組
String[] listNames = getResources().getStringArray(R.array.student);
/* 當選擇下拉菜單項的時候,將Activity中的內容置換爲對應的Fragment */
public boolean onNavigationItemSelected(int itemPosition, long itemId)
{
// 生成自定的Fragment
Ftest student = new Ftest();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// 將Activity中的內容替換成對應選擇的Fragment
transaction.replace(android.R.id.content, student, listNames[itemPosition]);
transaction.commit();
return true;
}
|
xml佈局:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
resources
>
<
string
name
=
"hello"
>Hello World, ActionBarTestActivity!</
string
>
<
string
name
=
"app_name"
>ActionBarTest</
string
>
<
string
name
=
"ActionBar_name"
>ActionBar下拉菜單</
string
>
<
string-array
name
=
"student"
>
<
item
>item1</
item
>
<
item
>item2</
item
>
<
item
>item3</
item
>
<
item
>item4</
item
>
</
string-array
>
</
resources
>
|
fragment:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public
class
Ftest
extends
Fragment
{
// Fragment對應的標籤,當Fragment依附於Activity時獲得
private
String tag;
@Override
public
void
onAttach(Activity activity)
{
super
.onAttach(activity);
tag = getTag();
}
@Override
public
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// View view = (View) inflater.inflate(R.layout.ftest, container, false);
// TextView textView=(TextView) view.findViewById(R.id.topView);
// textView.setText(tag);
TextView textView =
new
TextView(getActivity());
textView.setText(tag);
return
textView;
}
}
|
效果圖以下:
10、ActionBar的美化
一、
1
2
3
4
5
6
|
<
style
name
=
"MyActionBar"
parent
=
"@android:style/Widget.Holo.ActionBar"
>
<
item
name
=
"android:windowActionBarOverlay"
>true</
item
>
<
item
name
=
"android:background"
>@color/ab_background_color</
item
>
<
item
name
=
"android:backgroundStacked"
>@color/ab_backgroundStacked_color</
item
>
<
item
name
=
"android:backgroundSplit"
>@color/ab_backgroundSplit_color</
item
>
</
style
>
|
item name="android:background:ActionBar自己的背景顏色。
item name="android:backgroundStacked":ActionBar被分離時Tab 的背景顏色。
item name="android:backgroundSplit":ActionBar Item 在分割到底部時的背景顏色。
item name="android:background:藍色 item name="android:backgroundStacked":紫色 item name="android:backgroundSplit":綠色
二、其餘選項的Style
Action items
android:actionButtonStyle
1
2
3
4
5
6
7
|
<
style
name
=
"Widget.Holo.ActionButton"
parent
=
"Widget.ActionButton"
>
<
item
name
=
"android:minWidth"
>56dip</
item
>
<
item
name
=
"android:gravity"
>center</
item
>
<
item
name
=
"android:paddingLeft"
>12dip</
item
>
<
item
name
=
"android:paddingRight"
>12dip</
item
>
<
item
name
=
"android:scaleType"
>center</
item
>
</
style
>
|
從上面的定義看出,它定義了Button的最小寬度、居中樣式、左右padding以及圖片的放縮方式。再看看該樣式的父樣式
1
2
3
4
5
6
7
|
<
style
name
=
"Widget.ActionButton"
>
<
item
name
=
"android:background"
>?android:attr/actionBarItemBackground</
item
>
<
item
name
=
"android:paddingLeft"
>12dip</
item
>
<
item
name
=
"android:paddingRight"
>12dip</
item
>
<
item
name
=
"android:minWidth"
>56dip</
item
>
<
item
name
=
"android:minHeight"
>?android:attr/actionBarSize</
item
>
</
style
>
|
android:actionBarItemBackground
定義顯示的item選項的背景 Api 14以上可使用android:itemBackground定義所有Item的背景選項
這倆個選項其實和定義actionBarButtonStyle的背景已經有覆蓋 因此用的時候定義一個就行
android:actionBarDivider
樣式屬性actionBarDivider定義了ActionBar操做項之間的分隔條。能夠看出,它直接引用了另外一個ActionBar相關屬性 dividerVertical,其定義以下:
1
|
<
item
name
=
"dividerVertical"
>@drawable/divider_vertical_dark</
item
>
|
android:actionMenuTextColor
android:actionMenuTextAppearance
這倆個屬性是定義menu item 文字大小和顏色
1
2
3
4
5
6
7
|
<
style
name
=
"myactionMenuTextAppearance"
parent
=
"@android:style/TextAppearance.Holo.Large"
>
<
item
name
=
"android:textSize"
>20sp</
item
>
<
item
name
=
"android:textStyle"
>bold</
item
>
<
item
name
=
"android:textAllCaps"
>true</
item
>
</
style
>
<
item
name
=
"android:actionMenuTextAppearance"
>@style/myactionMenuTextAppearance</
item
>
<
item
name
=
"android:actionMenuTextColor"
>@color/ab_backgroundStacked_color</
item
>
|
android:actionBarWidgetTheme
Navigation tabs
android:actionBarTabStyle
樣式屬性 actionBarTabStyle 爲Tab頁的標籤訂義樣式
1
2
3
4
5
|
<
style
name
=
"Widget.Holo.ActionBar.TabView"
parent
=
"Widget.ActionBar.TabView"
>
<
item
name
=
"android:background"
>@drawable/tab_indicator_holo</
item
>
<
item
name
=
"android:paddingLeft"
>16dip</
item
>
<
item
name
=
"android:paddingRight"
>16dip</
item
>
</
style
>
|
android:actionBarTabBarStyle
樣式屬性actionBarTabBarStyle 定義了Tab標籤之間分隔條。
1
2
3
4
5
|
<
style
name
=
"Widget.Holo.ActionBar.TabBar"
parent
=
"Widget.ActionBar.TabBar"
>
<
item
name
=
"android:divider"
>?android:attr/actionBarDivider</
item
>
<
item
name
=
"android:showDividers"
>middle</
item
>
<
item
name
=
"android:dividerPadding"
>12dip</
item
>
</
style
>
|
android:actionBarTabTextStyle
樣式屬性 actionBarTabTextStyle 定義了Tab的文本樣式,以下:
1
2
3
4
5
6
7
8
9
|
<
style
name
=
"Widget.Holo.ActionBar.TabText"
parent
=
"Widget.ActionBar.TabText"
>
<
item
name
=
"android:textAppearance"
>@style/TextAppearance.Holo.Medium</
item
>
<
item
name
=
"android:textColor"
>?android:attr/textColorPrimary</
item
>
<
item
name
=
"android:textSize"
>12sp</
item
>
<
item
name
=
"android:textStyle"
>bold</
item
>
<
item
name
=
"android:textAllCaps"
>true</
item
>
<
item
name
=
"android:ellipsize"
>marquee</
item
>
<
item
name
=
"android:maxLines"
>2</
item
>
</
style
>
|
android:actionDropDownStyle
樣式屬性 actionDropDownStyle 定義了下拉導航列表的樣式,以下:
1
2
3
|
<
style
name
=
"Widget.Holo.Spinner.DropDown.ActionBar"
>
<
item
name
=
"android:background"
>@android:drawable/spinner_ab_holo_dark</
item
>
</
style
>
|
其父樣式
1
2
3
4
5
6
7
8
9
10
|
<
style
name
=
"Widget.Holo.Spinner"
parent
=
"Widget.Spinner.DropDown"
>
<
item
name
=
"android:background"
>@android:drawable/spinner_background_holo_dark</
item
>
<
item
name
=
"android:dropDownSelector"
>@android:drawable/list_selector_holo_dark</
item
>
<
item
name
=
"android:popupBackground"
>@android:drawable/menu_dropdown_panel_holo_dark</
item
>
<
item
name
=
"android:dropDownVerticalOffset"
>0dip</
item
>
<
item
name
=
"android:dropDownHorizontalOffset"
>0dip</
item
>
<
item
name
=
"android:dropDownWidth"
>wrap_content</
item
>
<
item
name
=
"android:popupPromptView"
>@android:layout/simple_dropdown_hint</
item
>
<
item
name
=
"android:gravity"
>left|center_vertical</
item
>
</
style
>
|
說下ActionBar 整體系統提供的樣式
樣式屬性actionBarStyle定義了ActionBar的基本樣式。
1
2
3
4
5
6
7
8
9
10
11
12
|
<
style
name
=
"Widget.Holo.ActionBar"
parent
=
"Widget.ActionBar"
>
<
item
name
=
"android:titleTextStyle"
>@android:style/TextAppearance.Holo.Widget.ActionBar.Title</
item
>
<
item
name
=
"android:subtitleTextStyle"
>@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</
item
>
<
item
name
=
"android:background"
>@android:drawable/ab_transparent_dark_holo</
item
>
<
item
name
=
"android:backgroundStacked"
>@android:drawable/ab_stacked_transparent_dark_holo</
item
>
<
item
name
=
"android:backgroundSplit"
>@android:drawable/ab_bottom_transparent_dark_holo</
item
>
<
item
name
=
"android:divider"
>?android:attr/dividerVertical</
item
>
<
item
name
=
"android:progressBarStyle"
>@android:style/Widget.Holo.ProgressBar.Horizontal</
item
>
<
item
name
=
"android:indeterminateProgressStyle"
>@android:style/Widget.Holo.ProgressBar</
item
>
<
item
name
=
"android:progressBarPadding"
>32dip</
item
>
<
item
name
=
"android:itemPadding"
>8dip</
item
>
</
style
>
|
其父樣式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<
style
name
=
"Widget.ActionBar"
>
<
item
name
=
"android:background"
>@android:drawable/action_bar_background</
item
>
<
item
name
=
"android:displayOptions"
>useLogo|showHome|showTitle</
item
>
<
item
name
=
"android:divider"
>@android:drawable/action_bar_divider</
item
>
<
item
name
=
"android:height"
>?android:attr/actionBarSize</
item
>
<
item
name
=
"android:paddingLeft"
>0dip</
item
>
<
item
name
=
"android:paddingTop"
>0dip</
item
>
<
item
name
=
"android:paddingRight"
>0dip</
item
>
<
item
name
=
"android:paddingBottom"
>0dip</
item
>
<
item
name
=
"android:titleTextStyle"
>@android:style/TextAppearance.Widget.ActionBar.Title</
item
>
<
item
name
=
"android:subtitleTextStyle"
>@android:style/TextAppearance.Widget.ActionBar.Subtitle</
item
>
<
item
name
=
"android:progressBarStyle"
>@android:style/Widget.ProgressBar.Horizontal</
item
>
<
item
name
=
"android:indeterminateProgressStyle"
>@android:style/Widget.ProgressBar.Small</
item
>
<
item
name
=
"android:homeLayout"
>@android:layout/action_bar_home</
item
>
</
style
>
|