ActionBar(11)样式相关的属性表及重要属性

 

一,ActionBar 相关样式属性

android:Theme主题 [  sdk/platforms/android-21/data/res/values/themes.xml  ] 

ActionBar定义的样式属性如下:name="XXXX" XXX就是,这些可以自定义.

<!-- Action bar styles -->
<item name="actionDropDownStyle">@style/Widget.Spinner.DropDown</item>
<item name="actionButtonStyle">@style/Widget.ActionButton</item>
<item name="actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
<item name="actionOverflowMenuStyle">?attr/popupMenuStyle</item>
<item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
<item name="actionModeSplitBackground">@null</item>
<item name="actionModeCloseDrawable">@drawable/ic_menu_close_clear_cancel</item>
<item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
<item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
<item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
<item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
<item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>
<item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_dark</item>
<item name="actionModeWebSearchDrawable">@drawable/ic_menu_search</item>
<item name="actionBarTabStyle">@style/Widget.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.ActionBar.TabText</item>
<item name="actionModeStyle">@style/Widget.ActionMode</item>
<item name="actionModeCloseButtonStyle">@style/Widget.ActionButton.CloseMode</item>
<item name="actionBarStyle">@style/Widget.ActionBar</item>
<item name="actionBarSplitStyle">?attr/actionBarStyle</item>
<item name="actionBarSize">@dimen/action_bar_default_height</item>
<item name="actionModePopupWindowStyle">?attr/popupWindowStyle</item>
<item name="actionMenuTextAppearance">@style/TextAppearance.Holo.Widget.ActionBar.Menu</item>
<item name="actionMenuTextColor">?attr/textColorPrimary</item>
<item name="actionBarWidgetTheme">@null</item>
<item name="actionBarPopupTheme">@null</item>
<item name="actionBarTheme">@null</item>
<item name="actionBarDivider">?attr/dividerVertical</item>
<item name="actionBarItemBackground">?attr/selectableItemBackground</item>

<item name="toolbarStyle">@style/Widget.Toolbar</item>

<item name="dividerVertical">@drawable/divider_vertical_dark</item>
<item name="dividerHorizontal">@drawable/divider_vertical_dark</item>
<item name="buttonBarStyle">@style/ButtonBar</item>
<item name="buttonBarButtonStyle">?attr/buttonStyle</item>
<item name="buttonBarPositiveButtonStyle">?attr/buttonBarButtonStyle</item>
<item name="buttonBarNegativeButtonStyle">?attr/buttonBarButtonStyle</item>
<item name="buttonBarNeutralButtonStyle">?attr/buttonBarButtonStyle</item>
<item name="segmentedButtonStyle">@style/SegmentedButton</item>

android:Theme.Holo主题 [  sdk/platforms/android-21/data/res/values/themes_holo.xml  ] 

ActionBar样式的定义,如下:该样式对Theme定义的大部分ActionBar样式进行了重写

<!-- Action bar styles -->
<item name="actionDropDownStyle">@style/Widget.Holo.Spinner.DropDown.ActionBar</item>
<item name="actionButtonStyle">@style/Widget.Holo.ActionButton</item>
<item name="actionOverflowButtonStyle">@style/Widget.Holo.ActionButton.Overflow</item>
<item name="actionOverflowMenuStyle">?attr/popupMenuStyle</item>
<item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_dark</item>
<item name="actionModeCloseDrawable">@drawable/ic_cab_done_holo_dark</item>
<item name="actionBarTabStyle">@style/Widget.Holo.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.Holo.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.Holo.ActionBar.TabText</item>
<item name="actionModeStyle">@style/Widget.Holo.ActionMode</item>
<item name="actionModeCloseButtonStyle">@style/Widget.Holo.ActionButton.CloseMode</item>
<item name="actionBarStyle">@style/Widget.Holo.ActionBar</item>
<item name="actionBarSize">@dimen/action_bar_default_height</item>
<item name="actionModePopupWindowStyle">@style/Widget.Holo.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
<item name="actionBarPopupTheme">@null</item>
<item name="actionBarTheme">@null</item>

<item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
<item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
<item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
<item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
<item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>
<item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_dark</item>
<item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_holo_dark</item>

<item name="dividerVertical">?attr/listDivider</item>
<item name="dividerHorizontal">?attr/listDivider</item>
<item name="buttonBarStyle">@style/Holo.ButtonBar</item>
<item name="buttonBarButtonStyle">?attr/borderlessButtonStyle</item>
<item name="segmentedButtonStyle">@style/Holo.SegmentedButton</item>

从中可以看到有一些重要的样式属性定义,如 actionBarStye actionButtonStyle actionModeStyle 等。

二, 重要样式属性actionBarStyle

样式属性actionBarStyle定义了ActionBar的基本样式。

 

  <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>

其父样式如下:

<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>

其中, background 定义了 ActionBar 的背景;

displayOptions定义了显示选项,这里声明了使用LOGO、显示Home以及Title

homeLayout定义了ActionBar左边Home的布局,包括向左返回上一层那个箭头。

 

三,重要样式属性actionButtonStyle

样式属性actionButtonStyle 定义了ActionBar上按钮的样式,比如ActionBar上的菜单按钮等。actionButtonStyle所引用的样式定义如下:

 

  <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以及图片的放缩方式。再看看该样式的父样式,如下:

 <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>


从这里看出,子样式重写了父样式中的一些属性,但保留了背景和最小高度。这个背景background属性经过两次引用,引用了HOLO的如下属性:

<item name="selectableItemBackground">@android:drawable/item_background_holo_dark</item>

很明显的就能看出,该背景引用的是一个selector类型的drawable。下面是这个drawable的定义:

 

<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:exitFadeDuration="@android:integer/config_mediumAnimTime">
    <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
    <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/list_selector_disabled_holo_dark" />
    <item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
    <item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" />
    <item android:state_focused="true"                                                             android:drawable="@drawable/list_focused_holo" />
    <item                                                                                          android:drawable="@color/transparent" />
</selector>

 

这里就能看出各个状态下引用的是哪些背景图片了。

 

四,重要样式属性actionBarDivider

 

样式属性actionBarDivider定义了ActionBar操作项之间的分隔条。可以看出,它直接引用了另一个ActionBar相关属性  dividerVertical,其定义如下:

 

<item name="dividerVertical">@drawable/divider_vertical_dark</item>

 

通过分析,这里引用的drawable直接对应一张图片,而不是selector类型。

 

 

 

五,重要样式属性actionMenuTextAppearance  actionMenuTextColor

 

样式属性actionMenuTextAppearance actionMenuTextColor定义了菜单的文本样式与颜色。

  <style name="TextAppearance.Holo.Widget.ActionBar.Menu"
           parent="TextAppearance.Holo.Small">
        <item name="android:textSize">12sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">?android:attr/actionMenuTextColor</item>
        <item name="android:textAllCaps">true</item>
    </style>


 

六,重要样式属性actionBarWidgetTheme

样式属性actionBarWidgetTheme 为被添加到ActionBar的操作栏中的Widget定义主题资源。

七,重要样式属性actionBarTabStyle

样式属性 actionBarTabStyle Tab页的标签定义样式,其引用样式如下:

    <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>

background属性定义了tab标签的背景,其也是selector类型的drawable。下面是该drawable的具体定义:

 

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Non focused states -->
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" />

    <!-- Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" />

    <!-- Pressed -->
    <!--    Non focused states -->
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
    <item android:state_focused="false" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />

    <!--    Focused states -->
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" />
    <item android:state_focused="true" android:state_selected="true"  android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" />
</selector>

 

八, 重要样式属性actionBarTabBarStyle

样式属性actionBarTabBarStyle 定义了Tab标签之间分隔条。

 

    <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>

 

可以看出,divider引用的资源与前面菜单分隔条引用的资源是相同的。

 

,重要样式属actionBarTabTextStyle

样式属性 actionBarTabTextStyle 定义了Tab的文本样式,如下:

 

    <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>

 

十,重要样式属性actionDropDownStyle

 

样式属性 actionDropDownStyle 定义了下拉导航列表的样式,如下:

 

    <style name="Widget.Holo.Spinner.DropDown.ActionBar">
        <item name="android:background">@android:drawable/spinner_ab_holo_dark</item>
    </style>

 

其祖先样式:

 

   <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相关的样式中还定义了ActionMode的样式,但ActionModeActionBar是属于两个不同类型的控件,这里就不对ActionMode进行介绍了。

 

通过上面对ActionBar样式的分析,我们就可能很容易在项目中根据实际需求对ActionBar的样式进行修改,特别是在主题切换功能中,要求对ActinBar的样式有比较全面深入的了解。除了ActionBar的样式之外,了解Android系统时何时创建ActionBar、以及根据不同feature创建不同的ActionBar也是非常重要的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值