ドロップダウンからアイテムを選択した後、スピナーボタンに表示される単一のアイテムのテキストの色を変更しようとしています。 Android SDKでthemes.xmlとstyles.xmlを1時間見てきましたが、Spinnerが色の値を取得している場所を見つけることができないようです。
明確にするために、ドロップダウンアイテムの色を変更するのではなく、ドロップダウンがないときにスピナーの表示テキストの色を変更しようとしています。スピナーの「ボタン」テキストと呼ぶことができると思います。
おそらく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>
-=編集=-結果は次のとおりです。
そして、これがどのように行われるかです:
<?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"
はい、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" >
すべてのスピナーの外側のテキストは緑になり、ドロップダウンのテキストは赤になります。
別の簡単な手法を使用してこれを行いました。
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" />
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);
}
});
実際には非常に簡単です。スタイルを作成してスピナーに設定するだけで、あなたを探していました
最初に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"/>
コーディングを楽しむ
テキストに関連する色があるとは思わない。 Androidコードで事前に定義されている可能性が高いため、スピナーの色を変更する場合は独自に作成する必要があります。
これには、ondraw()メソッドの変更が含まれ、スピナーを希望どおりに描画します。
私が考えられるのは、潜在的に解決できるだけです。この問題はスピナーのスタイルプロパティです。
ソース: http://developer.Android.com/reference/Android/widget/Spinner.html
これは役立つかもしれません:
これは、スピナーアイテムのカスタム定義を使用して独自のレイアウトファイルを作成するのに役立ちました。
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);
次のように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;
}