Ich verstehe, dass der geschlossene Spinner tatsächlich ein _View
ist, denke ich. Aber ich vermute, es hat irgendwo ein TextView
um den Text zu zeigen. Wie erhalte ich Zugriff auf diese TextView
, damit ich die Textfarbe ändern kann?
EDIT: Ich muss dies programmgesteuert on the fly ändern, nicht im XML.
TextView v = (TextView) getView(mySpinner);
v.setTextColor(.....
Das funktioniert nicht ...
Vielen Dank!
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);
Ich verstehe, dass der geschlossene Spinner tatsächlich eine Ansicht ist, denke ich.
Ja. Im Einzelnen ist es das, was Sie Ihrer SpinnerAdapter
sagen sollen.
Aber ich vermute, es gibt irgendwo eine Textansicht, um den Text anzuzeigen.
Das hängt davon ab, was Sie von Ihrer SpinnerAdapter
-Anweisung erwartet haben.
Wie erhalte ich Zugriff auf diese Textansicht, damit ich die Textfarbe ändern kann?
Im Idealfall tun Sie dies nicht - Sie geben der Farbe anfangs die richtige Farbe, und zwar über das, was Sie Ihrer SpinnerAdapter
gesagt haben. Wenn die Farbe variiert, überschreiben Sie getView()
in Ihrer SpinnerAdapter
und ändern Sie die Farbe an diesem Punkt.
Zur Not können Sie versuchen, getSelectedView()
aufzurufen, um die aktuelle View
anzuzeigen, die durch die geschlossene Spinner
angezeigt wird, aber alle Änderungen, die Sie hier vornehmen, können bei der nächsten Auswahl des Benutzers gelöscht werden. Die alternative Farbe wird später wieder angezeigt, wenn die frühere View
wiederverwendet wird .
Um die Textfarbe zu ändern, erstellen Sie eine neue XML-Datei in Ihrem Ordner res/layout (z. B. my_spinner_text.xml). Fügen Sie der neuen XML-Datei eine Textansicht hinzu und ändern Sie, wie Sie möchten:
<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"/>
Erstellen Sie einen ArrayAdapter, der das neue TextView verwendet, und legen Sie es für Ihren Spinner fest:
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);
Sie können die Textfarbe ändern oder auf die Textansicht im setOnItemSelectedListener-Ereignis zugreifen.
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));
}
um dies programmgesteuert zu machen, müssen Sie die Adapterklasse erweitern, etwa:
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
}
}
Bei Textfarbe ändern für geschlossene Spinner habe ich auf diese Art und Weise funktioniert
@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;
}