web-dev-qa-db-ja.com

シャーロックアクションバーのドロップダウンアイテムのスタイリング

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

SherlockActionBarプロジェクトのabs__styles.xmlabs__themes.xmlを調べてみましたが、プロジェクトに追加した項目がどれも機能しませんでした。

メニューを作成する方法は次のとおりです。

@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;
            }
        });
...
}

また、次のコードを使用してこれを見てみました post ですが、それでもうまくいきません。

<!-- 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>
15
noloman

私は同じ問題を抱えていました、そしてたくさんの頭の引っかき傷(ノミの悪いケースを持つ犬のような引っかき傷のようなもの)の後、私はそれを働かせました。これは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

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

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>

res/values/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

27
Richard Hollis

Sherlockアクションバー(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>

お役に立てれば。

4
Androyal

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

<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」ドローアブル(画像OR色)

3
JafarKhQ

この質問に満足のいく答えが得られたかどうかはわかりませんが、この問題に遭遇し、気に入った答えが見つかりませんでした。 ActionBarSherLockのかなり標準的な構成を持っているようで、ドロップダウンナビゲーションを使用すると、箱から出してすぐにいくつかの悪い結果が得られました。黒の背景に黒のテキスト。テキストを白くしたい。これが私がそれを達成した方法です:

手始めに、私のアプリケーションの基本テーマはTheme.Sherlockを拡張します。

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

私の実際のアプリケーションテーマAppThemeは、私のベースを拡張します(当時、なぜこれを行ったのか思い出せません。おそらく不要です)。

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

Widget.Sherlock.TextView.SpinnerItemなどを以下のようにオーバーライドする必要がありました。

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

これを行う理由は、TextApperanceウィジェットにアクセスするためでした:TextAppearance.Sherlock.Widget.TextView.SpinnerItem

これは以下のようにオーバーライドされました:

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

これを修正しようとしてテキストを取得しようとしたときの私の最大の間違いは、オーバーライドされたSpinnerItemStyleにtextColorを直接設定しようとしたことでした。 textAppearanceウィジェットを使用していたため、機能していませんでした。

次に、これを機能させるためのコードは次のようになります(私のアクティビティのonCreateメソッド内):

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

これにより、ActionBarSherlockを使用してスピナードロップダウンでテキストの色を変更できました。

2
maddesa

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

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

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

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

0
azgolfer