22 Stimmen

Wie kann ich die Schriftfarbe des Spinners ändern?

Ich habe ein Problem mit den Droid X-Telefonen, bei dem die Benutzer sagen, dass die Schriftfarbe in der Drehscheibe weiß ist, so dass sie nicht sichtbar ist, es sei denn, die Benutzer markieren die Elemente. Bei anderen Handys scheint dieses Problem nicht aufzutreten. Ich wollte versuchen, die Schriftfarbe auf schwarz zu setzen, um zu sehen, ob das hilft. Wie kann ich das tun?

Hier ist, wie ich bin derzeit Pop-up der Spinner. Es scheint wie die simple_spinner_item ist auf Droid X's defekt.

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,android.R.layout.simple_spinner_item, spin_arry);

46voto

inazaruk Punkte 73187

Ich werde Folgendes verwenden Spinner Projektbeispiel aus dem Android SDK für die nächsten Codebeispiele.


Code :

Zuerst müssen Sie einen benutzerdefinierten Adapter erstellen, der die Erstellung von Ansichten in Dropdown-Listen abfängt:

static class CustomArrayAdapter<T> extends ArrayAdapter<T>
{
    public CustomArrayAdapter(Context ctx, T [] objects)
    {
        super(ctx, android.R.layout.simple_spinner_item, objects);
    }

    //other constructors

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View view = super.getView(position, convertView, parent);

        //we know that simple_spinner_item has android.R.id.text1 TextView:         

        /* if(isDroidX) {*/
            TextView text = (TextView)view.findViewById(android.R.id.text1);
            text.setTextColor(Color.RED);//choose your color :)         
        /*}*/

        return view;

    }
}

Dann erstellen Sie einen Adapter in Ihrem Code wie folgt:

 String [] spin_arry = getResources().getStringArray(R.array.Planets);        
 this.mAdapter = new CustomArrayAdapter<CharSequence>(this, spin_arry);

Erläuterung:

Denn CustomArrayAdapter weiß, dass wir die in Android eingebaute Layout-Ressource verwenden, und es weiß auch, dass der Text in TextView mit id android.R.id.text1 . Deshalb kann es die Erstellung von Ansichten in Dropdown-Listen abfangen und die Textfarbe in die gewünschte Farbe ändern.


Screenshot:

enter image description here

7voto

Ashraf Punkte 3034

Einfach und knackig ...

private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() {
  public void onItemSelected(AdapterView<?> parent, View view, int pos,
        long id) {
    ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE);
    ((TextView) parent.getChildAt(0)).setTextSize(5);
  }

  public void onNothingSelected(AdapterView<?> parent) {
  }
};

7voto

Bhaskar Punkte 169

Ein schreiben R.layout.simplespinneritem

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Die ID lautet android:id="@android:id/text1" legen Sie die Farbe der Schrift und des Hintergrunds fest.

ArrayAdapter adapter =
  new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry);

3voto

noobProgrammer Punkte 1423
public class ee extends Activity{
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ww);
addListenerOnSpinnerItemSelection();

}
public void addListenerOnSpinnerItemSelection(){

    ArrayList<String> array = new ArrayList<String>();
    array.add("item0");
    Spinner spinner1;
    ArrayAdapter<String> mAdapter;
    spinner1= (Spinner) findViewById(R.id.spinner2);
    spinner1= new ArrayAdapter<String>(this, R.layout.spinner_item, array);
    spinner1.setAdapter(mAdapter);

}  
}

und in xml res/layout neue xml-Datei hinzufügen: Typ layout, spinner

(in spinner_item.xml)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top"
    android:singleLine="true"
    android:textColor="#00f0ff" />

2voto

Kumar Bibek Punkte 8945

Um die Antwort von Sasad zu ergänzen, erstellen Sie eine Kopie dieser Datei, die Sie in Ihrem Android-Ordner finden, in Ihrem Projekt, ändern Sie die Textfarbe der TextView in dieser Datei und verwenden Sie dieses Layout bei der Initialisierung des Adapters anstelle des Android-Layouts.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X