web-dev-qa-db-ja.com

Android:Spinnerウィジェットのテキストの色属性はどこに隠れていますか?

ドロップダウンからアイテムを選択した後、スピナーボタンに表示される単一のアイテムのテキストの色を変更しようとしています。 Android SDKでthemes.xmlとstyles.xmlを1時間見てきましたが、Spinnerが色の値を取得している場所を見つけることができないようです。

明確にするために、ドロップダウンアイテムの色を変更するのではなく、ドロップダウンがないときにスピナーの表示テキストの色を変更しようとしています。スピナーの「ボタン」テキストと呼ぶことができると思います。

75

おそらくstyles.xmlのこのビットだと思います

<style name="Widget.TextView.SpinnerItem">
    <item name="Android:textAppearance">@style/TextAppearance.Widget.TextView.SpinnerItem</item>
</style>
<style name="Widget.DropDownItem.Spinner">
    <item name="Android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
</style>

-=編集=-結果は次のとおりです。 enter image description here

そして、これがどのように行われるかです:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MooTheme" parent="Android:Theme">
        <item name="Android:spinnerItemStyle">@style/MooSpinnerItem</item>
    </style>

    <style name="MooSpinnerItem" parent="Android:Widget.TextView.SpinnerItem">
        <item name="Android:textAppearance">@style/MooTextAppearanceSpinnerItem</item>
    </style>

    <style name="MooTextAppearanceSpinnerItem" parent="Android:TextAppearance.Widget.TextView.SpinnerItem">
        <item name="Android:textColor">#F00</item>
    </style>
</resources>

次に、これをAndroidManifest.xmlのアプリケーションタグに追加します。

Android:theme="@style/MooTheme"
106
CaseyB

はい、CaseyBは正しいです。

以下に、スピナーのテキストの色を設定する方法を示します。簡単な例です。

styles.xml

    <style name="Theme.NoTitleBar.WithColoredSpinners" parent="@Android:style/Theme.NoTitleBar">
        <item name="Android:spinnerItemStyle">@style/SpinnerItem</item>
        <item name="Android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item>
    </style>

    <style name="SpinnerItem" parent="@Android:style/Widget.TextView.SpinnerItem">
        <item name="Android:textColor">#00FF00</item>
    </style>

    <style name="SpinnerItem.DropDownItem" parent="@Android:style/Widget.DropDownItem.Spinner">
        <item name="Android:textColor">#FF0000</item>
    </style>

</resources>

次に、マニフェストで:

<application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/Theme.NoTitleBar.WithColoredSpinners" >

すべてのスピナーの外側のテキストは緑になり、ドロップダウンのテキストは赤になります。

51
Blundell

別の簡単な手法を使用してこれを行いました。

simple_spinner_item.xmlとsimple_spinner_dropdown_item.xmlをAndroid res/layoutフォルダーからコピーして、プロジェクトにコピーします。

次に、次の行を変更します

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, Android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);

なので:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);

残りは簡単です。simple_spinner_item.xmlを編集してスピナーウィジェットの1つの表示項目の外観を編集し、simple_spinner_dropdown_item.xmlを編集してドロップダウンリストの外観を変更できるようになりました。

たとえば、私のアクティビティレイアウトには以下が含まれます。

<Spinner
Android:id="@+id/mo_spinnerSubject"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="5dp"
Android:background="@drawable/spinnerset_background" />

そして、私のsimple_spinner_item.xmlには次が含まれます:

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:singleLine="true"
Android:textColor="@color/custom_white"
Android:textSize="16sp" />

simple_spinner_dropdown_item.xmlは次のようになります。

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:background="@color/custom_black"
Android:ellipsize="Marquee"
Android:singleLine="true"
Android:textColor="@color/custom_white" />
28
saad

SpinnerオブジェクトでsetOnItemSelectedListenerを使用できます。

spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        ((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249));
        // OR ((TextView)parentView.getChildAt(0)).setTextColor(Color.RED);
    }
});
26
Rukmal Dias

実際には非常に簡単です。スタイルを作成してスピナーに設定するだけで、あなたを探していました

最初にStyle.xmlでテーマを作成します

 <style name="spinnerTheme" parent="Android:Theme">
    <item name="Android:textColor">@color/gray_dark</item>
</style>

次に、スピナーを設定したxmlに以下を追加します。

Android:theme = "@ style/spinnerTheme"

                       <Spinner
                        Android:id="@+id/spinner"
                        Android:layout_width="match_parent"
                        Android:layout_height="50dp"
                        Android:padding="10dp"
                        Android:paddingBottom="5dp"
                        Android:paddingLeft="10dp"
                        Android:layout_span="3"
                        Android:layout_weight="1.3"
                        Android:theme="@style/spinnerTheme"
                        Android:textSize="12sp"
                        Android:spinnerMode="dialog"
                        Android:clickable="false"/>

コーディングを楽しむ

11
Pre_hacker

テキストに関連する色があるとは思わない。 Androidコードで事前に定義されている可能性が高いため、スピナーの色を変更する場合は独自に作成する必要があります。

これには、ondraw()メソッドの変更が含まれ、スピナーを希望どおりに描画します。

私が考えられるのは、潜在的に解決できるだけです。この問題はスピナーのスタイルプロパティです。

ソース: http://developer.Android.com/reference/Android/widget/Spinner.html

これは役立つかもしれません:

http://www.designerandroid.com/?p=28

1
JoxTraex

これは、スピナーアイテムのカスタム定義を使用して独自のレイアウトファイルを作成するのに役立ちました。

custom_spinner.xml:
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/txt_spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textSize="16sp"
Android:textColor="#ffffff" />

アダプターを使用してスピナーアイテムを変更する

Spinner spinner= (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.by_loc_array,R.layout.txt_spinner);
spinner.setAdapter(adapter);
0
Muhammad Dawood

次のようにgetViewメソッドをオーバーライドすることにより、テキストの色を変更できます。

new ArrayAdapter<String>(getContext(), Android.R.layout.simple_spinner_dropdown_item, list()){
                @Override
                public View getView(int position, View convertView, @NonNull ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);
                    //change the color to which ever you want                    
                    ((CheckedTextView) view).setTextColor(Color.RED);
                    return view;
              }
0
Madhur