6

アクション バーでドロップダウン ナビゲーションを使用していますが、暗いアクション バーを使用すると、対応するテキストの適切な色を取得できません。アクションバー自体は濃いグレーで、文字色は黒なので非常に読みにくいです。

Action Bar 開発者ガイドの基本的な手順に従ったので、私のコードは単純です

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
    @Override
    public boolean onNavigationItemSelected(int itemPosition, long itemId) {
        // TODO
        return false;
    }
};
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);        
actionBar.setListNavigationCallbacks(mSpinnerAdapter, navigationListener);

私のstyles.xmlは単純でした

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    </style>
</resources>

それは私に何か賢明なものを与えたはずだと思いますが、次の画像が示すように、暗い灰色の背景に黒いテキストとして出てくるので、それは良くありません.

濃い灰色の背景に黒のテキストが表示されたメニューの画像

問題を解決するために、styles.xml ファイルをいじってみました。私の最善の試みは次のとおりでした

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:actionDropDownStyle">@style/myActionDropDownStyle</item>
        <item name="android:actionBarStyle">@style/myActionBar</item>
    </style>

    <style name="myActionDropDownStyle" parent="android:style/Widget.Holo.Light.Spinner">
        <item name="android:background">@color/LightCyan</item>
    </style>

    <style name="myActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">    
        <item name="android:titleTextStyle">@style/myActionBar.titleTextStyle</item>
    </style>

    <style name="myActionBar.titleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse">
        <item name="android:textColor">@color/Orange</item>
    </style>
</resources>

ナビゲーション ドロップダウンで項目を読みやすくするための最善の試み

(1)アプリタイトルの文字色をオレンジに変更、(2)アクションバーで選択したナビゲーション項目の背景色を水色に変更、(3)背景色を変更少なくとも黒いテキストが明るい背景に対して表示されるようにします。ただし、アクションバーに表示されている選択されたアイテムまたはドロップダウンに表示されているアイテムのいずれについても、テキストの色自体を変更することはありません。私の最善の試みも恐ろしいように見えます:-(!

私が欲しいのは、アクションバーに表示される選択されたアイテムの適切なテキストの色を持つ暗いアクションバーです。これは、アイテムが選択されているときに使用されるテキストの色と同じであり、アイテムが選択されているときのドロップダウンの背景色です選択されていることは、アクション バーと同じ色です。しかし、私はそれを行う方法を考え出すことができません. 誰か助けてもらえますか?

参考までに、最近ダウンロードした adt-bundle (adt-bundle-windows-x86_64-20130219) で Eclipse を使用しています。解決策を検索すると、Sherlock アクション バーについて多くの情報が見つかりましたが、Sherlock のスタイルはその adt-bundle に含まれていませんでした。いずれにせよ、私が使用している Holo.Light.DarkActionBar で私が望むことは確かに可能でしょうか?

4

6 に答える 6

9

次のように ArrayAdapter の独自のサブクラスを作成することにより、コードでドロップダウン ナビゲーションの色を変更できることがわかりました。

public class myArrayAdaptor<T> extends ArrayAdapter<T> {

    public myArrayAdaptor(Context context, int textViewResourceId, T[] objects) {
        super(context, textViewResourceId, objects);
    }

    public static myArrayAdaptor<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) {
        CharSequence[] strings = context.getResources().getTextArray(textArrayResId);
        return new myArrayAdaptor<CharSequence>(context, textViewResId, strings);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return SetColourWhite(super.getView(position, convertView, parent));
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return SetColourWhite(super.getView(position, convertView, parent));
    }

    private View SetColourWhite(View v) {
        if (v instanceof TextView) ((TextView)v).setTextColor(Color.rgb(0xff, 0xff, 0xff)); // white
        return v;
    }
}

次に、単純な styles.xml で

<resources>
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    </style>
</resources>

クラス myArrayAdaptor を置き換えることができます

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item)

テキストの色は常に白になります。しかし、styles.xml ファイルの設定を使用してこれを行う簡単な方法はありませんか?

于 2013-04-11T17:37:45.653 に答える
4

Java コード

SpinnerAdapter adapter = ArrayAdapter.createFromResource(this,
        R.array.actions,R.layout.dropdown_textcolor);

// OnNavigationListener
OnNavigationListener callback = new OnNavigationListener() {

    String[] items = getResources().getStringArray(R.array.actions); 
    public boolean onNavigationItemSelected(int position, long id) {

        // Do stuff when navigation item is selected
        Log.d("NavigationItemSelected", items[position]); // Debug
        return true;
    }

};


ActionBar actions = getSupportActionBar();
actions.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actions.setDisplayShowTitleEnabled(false);

actions.setListNavigationCallbacks(adapter, callback);

Xml dropdown_textcolor.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:textColor="@android:color/white"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:ellipsize="marquee"
    android:textAlignment="inherit"/>
于 2014-08-24T16:46:44.693 に答える
0

AppCompat サポート ライブラリを使用している場合は、これが役立つ場合があります。

<style name="MyActionBar3" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="android:background">@color/ActionBarBackground</item>         
</style>

<style name="MyActionBarDropDownStyle" parent="">
    <item name="android:background">#00FF00</item>        
    <item name="android:divider">#ff0000</item>
    <item name="android:dividerHeight">1dp</item> 
    <item name="android:textColor">#FFFFFF</item>     
    <item name="android:textSize">10sp</item>
</style>

<style name="MyTextStyle" parent="@style/Widget.AppCompat.Light.Base.ListPopupWindow">
    <item name="android:popupBackground">#FF0000</item>        
</style>
于 2015-03-29T16:06:06.983 に答える