クローズドスピナーは実際にはView
だと思います。しかし、テキストを表示するためのTextView
がどこかにあると思います。そのTextView
にアクセスして、テキストの色を変更するにはどうすればよいですか?
編集:XMLではなく、プログラムで即座に変更する必要があります。
TextView v = (TextView) getView(mySpinner);
v.setTextColor(.....
これは機能しません...
ありがとうございました!
array_typ=new String[5];
array_typ[0]="Pressure";
array_typ[1]="Level";
array_typ[2]="Overage";
array_typ[3]="Under";
array_typ[4]="Taken";
adaptertyp = new ArrayAdapter<Object>(this,R.layout.simple_spinner_item, array_typ);
typ.setAdapter(adaptertyp);
閉じたスピナーが実際にビューであることを理解しています。
はい。具体的には、SpinnerAdapter
に作成するように指示した内容です。
しかし、テキストを表示するためのTextViewがどこかにあると思います。
それは、SpinnerAdapter
に作成するように指示した内容によって異なります。
そのtextViewにアクセスして、textcolorを変更するにはどうすればよいですか?
理想的には、そうしないでください。SpinnerAdapter
に作成するように指示したものを使用して、最初に適切な色を付けます。色が異なる場合は、SpinnerAdapter
のgetView()
をオーバーライドし、その時点で色を変更します。
ピンチでは、getSelectedView()
を呼び出して、現在のView
が閉じたSpinner
で表示されるようにすることができますが、ここで行った変更は、ユーザーの次の変更で削除される可能性があります。選択すると、以前のView
がリサイクルされた場合、代替色が後で戻る可能性があります。
テキストの色を変更するには、res/layoutフォルダーに新しいxmlファイル(my_spinner_text.xmlなど)を作成します。新しいxmlファイルにテキストビューを追加し、必要に応じて変更します。
<TextView Android:id="@+id/spinnerText"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:textColor="#CCCCCC"
Android:textSize="20dp"
xmlns:Android="http://schemas.Android.com/apk/res/Android"/>
新しいTextViewを使用するArrayAdapterを作成し、スピナーに設定します。
Spinner localSpinner = (Spinner)findViewById(R.id.mySpinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.spinner_array,
R.layout.my_spinner_text);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
localSpinner.setAdapter(adapter);
テキストの色を変更したり、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));
}
プログラムでそれを行うには、次のようにアダプタクラスを拡張する必要があります。
ArrayAdapter<CharSequence> adapter = new ArrayAdater(this){
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
// change the color here of your v
v. ... etc. etc
}
}
これを試してみてください:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ((TextView)parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.colorPrimary));
閉じたスピナーのテキストの色を変更するには、このようにします
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
if (!((LabelItem) getItem(position)).isEnabled()) {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
} else {
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item));
}
return view;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.context_row_icon, null);
}
TextView mTitle = (TextView) view.findViewById(R.id.context_label);
ImageView flag = (ImageView) view.findViewById(R.id.context_icon);
mTitle.setText(values[position].getLabel(activity));
mTitle.setTextColor(activity.getResources().getColor(R.color.context_item_disabled));
return view;
}