it-swarm.com.de

Textfarbe eines geschlossenen Spinners

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);
21
Mark Worsnop

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 .

9
CommonsWare

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);
33
Vito

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));   

            }
23
Rukmal Dias

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        
        }
    }
1
Budius

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;
}
0