it-swarm.com.de

Wie kann man die Größe und Textfarbe des Spinners ändern?

In meiner Android-Anwendung verwende ich einen Spinner, und ich habe Daten aus der SQLite-Datenbank in den Spinner geladen, und er funktioniert ordnungsgemäß. Hier ist der Code dafür.

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>  (this,Android.R.layout.simple_spinner_item, list);
cursor.moveToFirst();

list.add("All Lists");

if (cursor.getCount() > 0) {
    for (int i = 0; i < cursor.getCount(); i++) {
        keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD));
        list.add(keyList[i]);
        cursor.moveToNext();
    }
}
Database.close();
cursor.close();
dataAdapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);

Jetzt möchte ich die Textfarbe und die Textgröße der Spinner-Daten ändern. Ich habe folgende XML-Zeilen für mein Spinner-Tag in meiner XML-Datei verwendet, aber es funktioniert nicht.

Android:textColor="@Android:color/white"
Android:textSize="11dp"

Wie kann ich die Textfarbe und die Textgröße meines Spinners ändern?

371

Erstellen Sie eine benutzerdefinierte XML-Datei für Ihren Spinner-Artikel.

spinner_item.xml:

Geben Sie dem Text in dieser Datei Ihre benutzerdefinierte Farbe und Größe.

<?xml version="1.0" encoding="utf-8"?>

<TextView  
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent" 
    Android:layout_height="wrap_content"
    Android:textSize="20sp"
    Android:gravity="left"  
    Android:textColor="#FF0000"         
    Android:padding="5dip"
    />

Verwenden Sie nun diese Datei, um Ihre Spinner-Elemente anzuzeigen:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);

Sie müssen die Dropdown-Ressource nicht festlegen. spinner_item.xml wird nur benötigt, um Ihre Artikel im Spinner anzuzeigen.

683
Hiral

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

    }
};
165
Ashraf

Wenn alle Drehfelder möglicherweise dieselbe Textfarbe für ihre TextView-Elemente haben, können Sie auch einen benutzerdefinierten Stil für Drehfeld-Dropdown-Elemente verwenden:

In res/values/styles.xml:

<resources>
    <style name="AppBaseTheme" parent="Android:Theme.Light">
    </style>

    <style name="AppTheme" parent="AppBaseTheme">
        <item name="Android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
    </style>

    <style name="mySpinnerItemStyle" parent="@Android:style/Widget.Holo.DropDownItem.Spinner">
        <item name="Android:textColor">@color/my_spinner_text_color</item>
    </style>
</resources>

Und definieren Sie Ihre benutzerdefinierte Farbe in res/values ​​/ colors.xml:

<color name="my_spinner_text_color">#808080</color>
140
Whypee

Hier ist ein Link, der Ihnen helfen kann, Ändern Sie die Farbe des Spinners:

Klick hier

<Spinner
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:id="@+id/spinner"
    Android:textSize="20sp"
    Android:entries="@array/planets"/>

Sie müssen eine eigene Layoutdatei mit einer benutzerdefinierten Definition für das Spinnerelement spinner_item.xmlerstellen. _:

<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:textSize="20sp"
    Android:textColor="#ff0000" />

Wenn Sie die Dropdown-Listenelemente anpassen möchten, müssen Sie eine neue Layoutdatei erstellen. spinner_dropdown_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@Android:id/text1"
    style="?android:attr/spinnerDropDownItemStyle"
    Android:maxLines="1"
    Android:layout_width="match_parent"
    Android:layout_height="?android:attr/listPreferredItemHeight"
    Android:ellipsize="Marquee"
    Android:textColor="#aa66cc"/>

Und zum Schluss noch eine Änderung in der Erklärung des Spinners:

ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, R.layout.spinner_item);

adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
spinner.setAdapter(adapter);

Das ist es.

65
Niib Fouda

Um Verzögerungen zu vermeiden, müssen Sie nicht nur die Texteigenschaften im Listener onItemSelected festlegen, sondern auch in der onCreate-Methode der Aktivität (dies ist jedoch etwas schwierig).

Nach dem Festlegen des Adapters müssen Sie dies insbesondere in onCreate eingeben:

spinner.setSelection(0, true);
View v = spinner.getSelectedView();
((TextView)v).setTextColor(backgroundColor);

Und dann das in onItemSelected:

((TextView) view).setTextColor(backgroundColor);

Hier ist ein vollständiges Beispiel:

@Override  
protected void onCreate(Bundle savedInstanceState)
{  
    Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    //Set the choices on the spinner by setting the adapter.  
    spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor));

    //Set the text color of the Spinner's selected view (not a drop down list view) 
    spinner.setSelection(0, true);
    View v = spinner.getSelectedView();
    ((TextView)v).setTextColor(backgroundColor);

    //Set the listener for when each option is clicked.  
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {  

        @Override  
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {  
           //Change the selected item's text color  
           ((TextView) view).setTextColor(backgroundColor);
        }  

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

}  

Für weitere Details siehe meine Frage .

15
Rock Lee

Wenn Sie mit Android.support.v7.widget.AppCompatSpinner arbeiten, ist hier die einfachste getestete Lösung, die Stile verwendet:

 <Android.support.v7.widget.AppCompatSpinner
                    Android:id="@+id/spefcialFx"
                    style="@style/Widget.AppCompat.Spinner.Underlined"
                    Android:layout_width="200dp"
                    Android:layout_height="wrap_content"
                    Android:layout_marginLeft="4dp"
                    Android:theme="@style/Spinner"
                    Android:entries="@array/special_fx_arrays"
                    Android:textSize="@dimen/text_size_normal"></Android.support.v7.widget.AppCompatSpinner>

Und der Stil:

<style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
        <item name="Android:paddingStart">0dp</item>
        <item name="Android:paddingEnd">0dp</item>
        <item name="Android:textColor">@color/white</item>
        <item name="Android:backgroundTint">@color/red</item>
        <item name="Android:textSize">14sp</item>
    </style>

Der einzige Nachteil ist das Android: backgroundTint legt die Farbe für den Dropdown-Pfeil und den Dropdown-Hintergrund fest.

14
voytez

Wenn Sie möchten, dass die Textfarbe nur in dem ausgewählten Element geändert wird, kann dies eine mögliche Problemumgehung sein. Es hat für mich funktioniert und sollte auch für Sie funktionieren.

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
            }
        });
12
vishal-wadhwa

Für jemanden, der nur Style für AppCompat benötigt.

Ergebnis
 enter image description here  enter image description here

styles.xml 

<resources>
    ... 
    <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
        <item name="Android:paddingStart">0dp</item>
        <item name="Android:paddingEnd">0dp</item>
        <item name="Android:textColor">@color/material_grey_700</item>
        <item name="Android:textSize">12sp</item>
    </style>
</resources>

your_spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" />
    ...

    <Android.support.v7.widget.AppCompatSpinner
        Android:id="@+id/content_spinner"
        style="@style/Widget.AppCompat.Spinner.Underlined"
        Android:layout_width="140dp"
        Android:layout_height="wrap_content"
        Android:entries="@array/shipping_tracking_carrier_names"
        Android:spinnerMode="dropdown"
        Android:theme="@style/Spinner" />

    <EditText
        Android:id="@+id/content_input"
        Android:layout_width="140dp"
        Android:layout_height="wrap_content"
        Android:inputType="text"
        Android:maxLines="1"
        Android:paddingEnd="8dp"
        Android:paddingStart="8dp"
        Android:textColor="@color/material_grey_700"
        Android:textSize="12sp" />

    ...
</LinearLayout>    

Plus
Und wenn Sie Android:entries programmgesteuert mit definiertem Stil festlegen möchten.
Versuche dies. 

AppCompatSpinner spinner = findViewById(R.id.content_spinner);
CharSequence[] entries = getResources().getTextArray(R.array.shipping_tracking_carrier_names);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(spinner.getContext(), Android.R.layout.simple_spinner_item, entries);
adapter.setDropDownViewResource(Android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

Wie im Code ist die Verwendung derselben Context mit der Spinner am wichtigsten. 

spinner.getContext()
4
wonsuc

Anstatt ein benutzerdefiniertes Layout zu erstellen, um eine kleine Größe zu erhalten, und wenn Sie das interne kleine Layout von Android für den Spinner verwenden möchten, sollten Sie Folgendes verwenden:

"Android.R.layout.simple_gallery_item" anstelle von "Android.R.layout.simple_spinner_item".

ArrayAdapter<CharSequence> madaptor = ArrayAdapter
            .createFromResource(rootView.getContext(),
                                R.array.String_visitor,
                                Android.R.layout.simple_gallery_item);

Es kann die Größe des Spinner-Layouts reduzieren. Es ist nur ein einfacher Trick.

Wenn Sie die Größe einer Dropdown-Liste verringern möchten, verwenden Sie Folgendes:

madaptor.setDropDownViewResource(Android.R.layout.simple_gallery_item);
4
Hemant Shori

Für diejenigen, die DrowDownIcon color ändern möchten, können Sie sie wie folgt verwenden

spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
3
AMAN SINGH

Der einfachste Weg, die Android.R.layout-Ressourcen wiederzuverwenden/zu ändern, ist einfach die Definition. In Android Studio tun Ctrl + B auf Android.R.layout.simple_spinner_item.xml.

Sie gelangen zur Ressourcendatei. Kopieren Sie einfach die Ressourcendatei und fügen Sie ein neues Layout in Ihren Package.R.layout-Ordner ein und ändern Sie die textColor der Textansicht nach Ihren Wünschen. Rufen Sie sie dann einfach im Adapter wie folgt auf:

ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);
2
ZygoteInit

Kann die Textfarbe ändern, indem Sie die getView-Methode wie folgt überschreiben:

 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);
                    //change the size to which ever you want                    
                    ((CheckedTextView) view).setTextSize(5);
                    //for using sp values use setTextSize(TypedValue.COMPLEX_UNIT_SP, 16);
                    return view;
                }
    }
2
Madhur

Einfachste: Funktioniert für mich

TextView spinnerText = (TextView) spinner.getChildAt(0);

spinnerText.setTextColor(Color.RED);
2

Wenn Sie eine einfache Methode wünschen, um Elemente zu einer Dropdown-Liste hinzuzufügen, fügen Sie sie normalerweise der Zeichenfolge.xml hinzu. Hier ein Beispiel, wie Sie mithilfe der Datei strings.xml Farbe hinzufügen:

WÄHLEN SIE DIE ALTE AUS

<string-array name="age_array">

   <item> 0-6 </item>                               //No custom colour

  <item><font fgcolor='#FF4CD964'> 12+ </font></item> //With custom colour

</string-array>
1
Gamer Gunshield
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:id="@Android:id/text1"
    style="?android:attr/spinnerItemStyle"
    Android:singleLine="true"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColor="#fff"
    Android:ellipsize="Marquee"
    Android:textAlignment="inherit"/>

benutze einfach folgendes:

ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
    R.layout.spinner_list_item, categories);
adapter_category
    .setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
1
santosh

Zuerst müssen wir die einfache xml-Ressourcendatei für die textview wie folgt erstellen: 

<?xml version="1.0" encoding="utf-8"?>

 <TextView  
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent" 
    Android:layout_height="wrap_content"
    Android:textSize="20sp"
    Android:gravity="left"  
    Android:textColor="#FF0000"         
    Android:padding="5dip"
    />   

und speichern Sie es. nachdem auf deiner Adapterliste eingestellt.

1
Ishor Neupane

füge einfach einen neuen Stil hinzu:

<style name="mySpinnerItemStyle" parent="ThemeOverlay.AppCompat.Dark">
    <item name="Android:textColor">#000</item>
    <item name="Android:color">#000</item>
</style>

und benutze es:

<Spinner
      Android:id="@+id/spinnerCategories"
      Android:layout_width="match_parent"
      Android:layout_height="wrap_content"
      style="@style/mySpinnerItemStyle"
      Android:layout_margin="5dp" />
0
Elyas Nategh

So ändern Sie die Farbe des Drehfeldtextes:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}
0
Hanisha

sie können diese Art von Adapter für Spinner haben, ganz individuell:

 ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_text, genderList) {

        public View getView(int position, View convertView, ViewGroup parent) {
            View v = super.getView(position, convertView, parent);
            ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
            ((TextView) v).setTextColor(Color.parseColor("#676767"));
            ((TextView) v).setTypeface(vrFont);
            return v;
        }

        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            View v = super.getDropDownView(position, convertView, parent);
            ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
            ((TextView) v).setTypeface(vrFont);
            ((TextView) v).setTextColor(Color.parseColor("#676767"));

            if (position == 0) {
                ((TextView) v).setTextColor(Color.parseColor("#979797"));
            }

            return v;
        }

während R.layout.spinner_text ist:

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/text1"
style="?android:attr/spinnerItemStyle"
Android:layout_width="fill_parent"
Android:layout_height="40dp"
Android:gravity="center_vertical|left"
Android:ellipsize="Marquee"
Android:maxLines="1"
Android:textColor="@color/whiteThree" />
0
blackHawk

Eine andere Variante der Lösung von Ashraf besteht darin, sicherzustellen, dass Sie die Bildschirmgröße berücksichtigen. Sie müssen den Spinner in onCreate installieren und den Listener einstellen, nachdem Sie den Adapter festgelegt haben:

//set your adapter with default or custom spinner cell, then://
serverSpinner.setOnItemSelectedListener(spinnerSelector);
serverSpinner.setSelection(defaultServer);

Dann können Sie die Textgröße der Ansicht ändern, die angezeigt wird, bevor auf den Spinner geklickt wird:

private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
        boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet);
        if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); }
        else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); }
        else { ((TextView)parent.getChildAt(0)).setTextSize(12); }
    }
    public void onNothingSelected(AdapterView<?> parent) {

    }
};

Sie müssen lediglich layoutspezifische Ordner wie folgt erstellen:

werte-sw360dp

werte-sw600dp

werte-sw800dp

und fügen Sie dann eine xml-Datei mit dem Namen "bool.xml" in jeden dieser Ordner ein:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">false</bool>
    <bool name="isLargeTablet">false</bool>
</resources>
0
whyoz

Ich habe dies wie folgt gemacht. Ich habe die Methoden getDropDownView () und getView () verwendet.

Verwenden Sie getDropDownView() für einen geöffneten Spinner.

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

Und verwenden Sie getView() für geschlossenen Spinner.

@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