15

アクション バーに追加したドロップダウン リストの項目のスタイルをしばらく設定しようとしましたが、正しいコードが思いつきません。

abs__styles.xmlプロジェクトでとを調べてみましたがabs__themes.xmlSherlockActionBarプロジェクトに追加したアイテムはどれも機能しませんでした。

私がメニューを作成している方法は次のとおりです。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Sharing icons
        SubMenu submenu = menu.addSubMenu(null);
        submenu.add(getResources().getString(R.string.twitter));
        submenu.add(getResources().getString(R.string.facebook));
        submenu.add(getResources().getString(R.string.email));

        // Share button itself
        MenuItem ShareButton = submenu.getItem();
        ShareButton.setIcon(R.drawable.icon_share_triangle);
        ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);

        // Twitter submenu button
        MenuItem TwitterItem = submenu.getItem(0);
        TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
        TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                setShareTwitterIntent();
                return true;
            }
        });
...
}

また、次のコードを使用してこの投稿を見てみましたが、まだうまくいきません:

<!-- style the list navigation -->
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar">
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item>
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item>
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item>
</style>

ドロップダウンリストのアイテムの背景色を変更するだけです。

助けてくれてどうもありがとう!

編集:

私もこれを試しましたが、まだ動作しません:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item>
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item>
...
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar">
        <item name="android:background">@drawable/sharing_panel</item>
</style>
4

5 に答える 5

27

私は同じ問題を抱えていて、多くの頭を引っ掻いた後、ノミの悪いケースを持った犬のような引っ掻きのようなものでした-私はそれを機能させました. こちらはABS4.1(90)付きです。以下のコードは、ドロップダウン項目の背景色を変更します。

SomeActivity.java

Context context = ab.getThemedContext();
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list,
    R.layout.sherlock_spinner_item);
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

注: createFromResource には R.layout.sherlock_spinner_item を使用し、setDropDownViewResource には R.layout.sherlock_spinner_dropdown_item を使用します。これは、ABS ソースのサンプルに表示されるものです: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

これは、アクション バーで選択されていないドロップダウンが sherlock_spinner_item レイアウトであり、実際のドロップダウン アイテムが sherlock_spinner_dropdown_item レイアウトを使用しているためです。つまり、スタイルはそれぞれ異なります。

  • sherlock_spinner_item
    • android:spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • android:spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

両方のスタイルが必要であることを覚えておいてください - ネイティブ ICS ActionBar 用の android: プレフィックス付きスタイルと、ICS より古いデバイスの AcrionBarSherlock スタイル用の android: プレフィックスなしのスタイル。

res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light">
        <!--  the text when loading -->
        <!--
        <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item>
        <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item>
        -->

        <!-- the dropdown items -->
        <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>
        <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item>

        <!--  the action bar dropdown menu item -->
        <!-- 
        <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
        <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item>
        -->
    </style>

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar">
        <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
        <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item>
    </style>

   <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title">
    <item name="android:textColor">@color/orange</item>
    </style>

   <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner">
       <item name="android:background">@color/orange</item>
    </style>

   <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem">
       <item name="android:background">@color/orange</item>
    </style>

</resources>

解像度/値/color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

 <color name="orange">#ffEf4f1f</color>

</resources>

これで解決する場合は、回答としてマークしてください。ありがとう!

リンク:

スタイルを閲覧:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

テーマを閲覧:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

于 2012-07-19T10:20:16.757 に答える
4

Sherlock Action Bar (v4.1.0) のメニュー項目の背景のドローアブルを変更するには、次を使用します。

<style name="My_Theme" parent="Theme.Sherlock">
  <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
  <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item>
</style>

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow">
  <item name="android:popupBackground">@drawable/menu_item_background</item>
</style>

お役に立てれば。

于 2012-08-30T03:23:46.010 に答える
3

私はこれを使用しました、そしてその仕事は私にとって

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar">
    <item name="android:background">@drawable/spinner_background_holo_light</item>
    <item name="android:popupBackground">@color/actionbar_normal</item>
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item>
</style>

<style name="myTheme" parent="@style/Theme.Sherlock">
    ...
    ...
    ...
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item>
    <item name="actionDropDownStyle">@style/MyDropDownItem</item>
</style>

どこ、

「spinner_background_holo_light」と「list_selector_holo_light」はセレクターです

「actionbar_normal」ドローアブル (画像または色)

于 2012-11-07T13:31:02.397 に答える
2

I am not sure if this question has been answered in a satisfactory way, but I ran into this problem and did not find an answer that I liked. It seemed like I had a pretty standard configuration of ActionBarSherLock and using the drop down navigation gave me some bad results out of the box. Black text on a black background. I want to make the text white. Here is how I accomplished it:

For starters, my application's base theme extends Theme.Sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock">
</style>

My actual application theme AppTheme extends my base (I can't remember why I did this at the time, it is likely unnecessary).

<style name="AppTheme" parent="AppBaseTheme">
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item>
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item>
</style>

I needed to override Widget.Sherlock.TextView.SpinnerItem and so as below:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem">
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item>
</style>

The reason for doing this was to access the TextApperance widget: TextAppearance.Sherlock.Widget.TextView.SpinnerItem

This was overridden as below:

<style name="TextAppearance.MySpinnerItem"    parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem">
  <item name="android:textColor">#FFFFFF</item>
  <item name="android:textSize">16sp</item>
  <item name="android:textStyle">normal</item>
</style>

My biggest mistake in tying to get the text in trying to fix this was trying to directly set textColor in the overridden SpinnerItemStyle. Since it used a textAppearance widget, it was just not working.

Then my code to make this work looks like this (in my activity's onCreate method):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this,
            R.array.call_type, R.layout.sherlock_spinner_item);

OnNavigationListener onNavigationListener = new OnNavigationListener() {
        // Get the same strings provided for the drop-down's ArrayAdapter
        String[] strings = getResources().getStringArray(R.array.call_type);

        @Override
        public boolean onNavigationItemSelected(int position, long itemId) {
            String filter = strings[position];
            filterCalls(filter);
            return true;
        }
    };

ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    actionBar.setListNavigationCallbacks(spinnerAdapter,
            onNavigationListener);

This allowed my to change the color of the text, on the spinner drop down using ActionBarSherlock.

于 2013-03-08T19:19:06.280 に答える
0

ActionBarSherlock では、3 つのテーマのいずれかを使用する必要があります。ただし、次のように、それらを拡張してドロップダウン スタイルをオーバーライドできます。

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light">
   <item name="actionDropDownStyle">@style/MyDropDownNav</item>
</style>

これは、ホロ ライト テーマが必要で、ドロップダウン スタイルが MyDropDownDav であることを前提としています。

次に、コードで、テーマを使用するように切り替えます (マニフェストで、またはアクティビティの onCreate で行います)。

于 2012-07-09T15:20:04.523 に答える