【问题标题】:Using ActionBarSherlock without the default Android theme在没有默认 Android 主题的情况下使用 ActionBarSherlock
【发布时间】:2013-01-05 02:02:54
【问题描述】:

我想在我的 Android 应用程序中使用 SherlockActionBar。目前,我没有在清单中声明 android:theme。由于 SherlockActionBar 要求我定义一个我试过的:

android:theme="@style/Theme.Sherlock.Light.DarkActionBar"

显然这个主题导致我的应用程序使用 DarkActionBar 主题,这导致 ListView、TextViews 等。有没有办法使用 Theme.Sherlock.Light.DarkActionBar 作为应用程序主题,但将其与“默认”集成,应用程序的其余部分没有指定主题?

【问题讨论】:

    标签: android android-actionbar actionbarsherlock android-theme


    【解决方案1】:

    实际上Theme.Sherlock.Light.DarkActionBar 主题只是将holo 主题应用于ActionBar。从Sherlock.Theme 中可以看到,11 以下的 API:

    <style name="Theme.Sherlock" parent="Sherlock.__Theme">
            <!-- Action bar styles (from Theme.Holo) -->
            <item name="actionDropDownStyle">@style/Widget.Sherlock.Spinner.DropDown.ActionBar</item>
            <item name="actionButtonStyle">@style/Widget.Sherlock.ActionButton</item>
            <item name="actionOverflowButtonStyle">@style/Widget.Sherlock.ActionButton.Overflow</item>
            <item name="actionModeBackground">@drawable/abs__cab_background_top_holo_dark</item>
            <item name="actionModeSplitBackground">@drawable/abs__cab_background_bottom_holo_dark</item>
            <item name="actionModeCloseDrawable">@drawable/abs__ic_cab_done_holo_dark</item>
            <item name="actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabView</item>
            <item name="actionBarTabBarStyle">@style/Widget.Sherlock.ActionBar.TabBar</item>
            <item name="actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabText</item>
            <item name="actionModeStyle">@style/Widget.Sherlock.ActionMode</item>
            <item name="actionModeCloseButtonStyle">@style/Widget.Sherlock.ActionButton.CloseMode</item>
            <item name="actionBarStyle">@style/Widget.Sherlock.ActionBar</item>
            <item name="actionBarSize">@dimen/abs__action_bar_default_height</item>
            <!-- Internal --><item name="actionModePopupWindowStyle">@style/Widget.Sherlock.PopupWindow.ActionMode</item>
            <item name="actionBarWidgetTheme">@null</item>
    
            <!-- Action bar styles (defaults from Theme) -->
            <item name="actionBarSplitStyle">?attr/actionBarStyle</item>
            <item name="actionMenuTextAppearance">@style/TextAppearance.Sherlock.Widget.ActionBar.Menu</item>
            <item name="actionMenuTextColor">?attr/textColorPrimary</item>
            <item name="actionBarDivider">?attr/dividerVertical</item>
            <item name="actionBarItemBackground">?attr/selectableItemBackground</item>
    
            <item name="buttonStyleSmall">@style/Widget.Sherlock.Button.Small</item>
    
            <item name="selectableItemBackground">@drawable/abs__item_background_holo_dark</item>
    
            <item name="activatedBackgroundIndicator">@drawable/abs__activated_background_holo_dark</item>
            <item name="actionModeShareDrawable">@drawable/abs__ic_menu_share_holo_dark</item>
            <item name="activityChooserViewStyle">@style/Widget.Sherlock.ActivityChooserView</item>
    
            <item name="homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item>
    
            <item name="dividerVertical">@drawable/abs__list_divider_holo_dark</item>
    
            <item name="spinnerDropDownItemStyle">@style/Widget.Sherlock.DropDownItem.Spinner</item>
            <item name="spinnerItemStyle">@style/Widget.Sherlock.TextView.SpinnerItem</item>
    
            <item name="textColorPrimary">@color/abs__primary_text_holo_dark</item>
            <item name="textColorPrimaryDisableOnly">@color/abs__primary_text_disable_only_holo_dark</item>
            <item name="textColorPrimaryInverse">@color/abs__primary_text_holo_light</item>
    
            <!-- Internal --><item name="dropdownListPreferredItemHeight">48dip</item>
            <item name="dropDownListViewStyle">@style/Widget.Sherlock.ListView.DropDown</item>
    
            <item name="textAppearanceSmall">@style/TextAppearance.Sherlock.Small</item>
            <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Sherlock.Widget.PopupMenu.Large</item>
            <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Sherlock.Widget.PopupMenu.Small</item>
    
            <item name="popupMenuStyle">@style/Widget.Sherlock.PopupMenu</item>
            <!-- Internal --><item name="listPopupWindowStyle">@style/Widget.Sherlock.ListPopupWindow</item>
    
            <item name="searchDropdownBackground">@drawable/abs__search_dropdown_dark</item>
            <item name="searchViewTextField">@drawable/abs__textfield_searchview_holo_dark</item>
            <item name="searchViewTextFieldRight">@drawable/abs__textfield_searchview_right_holo_dark</item>
            <item name="searchViewCloseIcon">@drawable/abs__ic_clear</item>
            <item name="searchViewSearchIcon">@drawable/abs__ic_search</item>
            <item name="searchViewGoIcon">@drawable/abs__ic_go</item>
            <item name="searchViewVoiceIcon">@drawable/abs__ic_voice_search</item>
            <item name="searchAutoCompleteTextView">@style/Widget.Sherlock.SearchAutoCompleteTextView</item>
            <item name="android:dropDownHintAppearance">@style/TextAppearance.Sherlock.Widget.DropDownHint</item>
    
            <item name="windowActionBar">true</item>
            <item name="windowActionModeOverlay">false</item>
            <item name="windowContentOverlay">@null</item>
        </style>
    

    没有为ActionBar指定TextViewStyle或任何其他样式,因此您不需要修改主题。

    如您所见,所有其他样式均由父主题 Sherlock.__Theme 完成。而这个 Theme 基本上就是 11 以下 API 上的 NoTitleBar 主题。

    <style name="Sherlock.__Theme" parent="android:Theme.NoTitleBar">
            <item name="android:windowContentOverlay">@null</item>
    </style>
    

    所以这不会覆盖任何其他样式,您最终将拥有“默认”主题。

    【讨论】:

    • 我指的默认主题不是 Holo 或 NoTitleBar 主题,而是与您一起使用的主题,根本没有在清单中指定主题。这有意义吗?
    • 重读我的答案。如果你不指定主题,你最终会在 API=11 上得到 Holo,android:Theme.NoTitleBar 只不过是 android:Theme,没有 TitleBar(你由于 ActionBar 必须删除)
    • 好的,有道理。所以我想我的问题是:有没有什么方法可以在 API >= 11 中实现类似于 android:Theme.NoTitleBar 而无需大量工作?
    • 在 values-v11 文件夹的 ABS 库中搜索 Sherlock.__Theme 并使用 android:Theme.NoTitleBar 作为父级而不是 holo。
    • 没问题,很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2014-08-21
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多