Jak zmienić rozmiar i kolor tekstu przędzarki?

432

W mojej aplikacji na Androida korzystam z tarczy i załadowałem dane z bazy danych SQLite do tarczy i działa ona poprawnie. Oto kod do tego.

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

Teraz chcę zmienić kolor i rozmiar tekstu danych przędzarki. Użyłem następujących linii XML do mojego znacznika spinnera w moim pliku XML, ale to nie działa.

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

Jak mogę zmienić kolor i rozmiar tekstu mojej przędzarki?

Dinesh Anuruddha
źródło
sprawdź następujące witryny [StackoverFlow] [1] [stackoverflow] [2] [stackoverflow] [3] Myślę, że to jest duplikat pytania [1]: stackoverflow.com/questions/4880413/… [2]: stackoverflow.com/questions / 4989817 /… [3]: stackoverflow.com/questions/5836254/…
user1203673
spróbuj tego postu stackoverflow.com/questions/6159113/…
Ajay
1
Dla textSize poprawne jest użycie SP ... android: textSize = "11sp"
Diego Venâncio

Odpowiedzi:

780

Utwórz niestandardowy plik XML dla elementu przędzarki.

spinner_item.xml:

Podaj własny kolor i rozmiar tekstu w tym pliku.

<?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"
    />

Teraz użyj tego pliku, aby wyświetlić elementy przędzarki, takie jak:

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

Nie musisz ustawiać rozwijanego zasobu. Wystarczy, że spinner_item.xmlpokażesz swoje przedmioty w tarczy.

Hiral Vadodaria
źródło
2
@Hiral tekst będzie biały tylko dla aktualnie wybranego elementu.
tesla,
8
@ SANTHOSH cóż, musisz dodać identyfikator do TextView, wystarczy tam dołączyć android:id="@+id/customSpinnerItemTextView". Gdybyś to debugował, wiedziałbyś o tym.
vilpe89
3
@ vilpe89 czy możesz zmodyfikować powyższy kod, aby pokazać, co masz na myśli? gdzie idzie ten android: id? na pewno nie w znaczniku przędzarki, ponieważ ma swój własny identyfikator. ale nie ma sensu dodawać go do tagu viewview, który utworzyłeś powyżej. jak mogę wskazać, że chcę użyć tego znacznika bezpośrednio z pliku XML? również, podczas tworzenia XML z Eclipse, nie widzę żadnej opcji, aby utworzyć plik XML zawierający tylko TextView, jak to działa ???
Michael
29
Tylko mała uwaga. Textsize powinien używać sp zamiast dp / dip
ymerdrengene
18
czy nie można tego zrobić tylko za pomocą stylu? Jestem zaskoczony, jak małe rzeczy są tak trudne do zaprojektowania w Androidzie ... to jest frustrujące ... Szkoda, że ​​nie mają takiego systemu stylizacji jak css
yeahman
183

Prosty i wyraźny ...:

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

    }
};
Ashraf
źródło
19
To dla mnie najlepsze rozwiązanie, ponieważ musiałem zmienić kolor tekstu w tarczy, ale nie na wyświetlanej liście. Dziękuję Ci.
peter.bartos
7
Dla mnie kolor przedmiotu miga, przechodząc od pierwotnego koloru do koloru, który wybrałem
Felipe Conde
@FelipeConde Czy kiedykolwiek znalazłeś odpowiedź? Mam to samo pytanie. Moje pytanie jest tutaj: stackoverflow.com/questions/33908564/...
Rock Lee
@FelipieConde Dla ciebie najpierw przyjmuje kolor wznoszenia, a następnie ręcznie zmieniasz kolor na inny, więc wygląda na zmęczonego. Najpierw zajmuje <item name = "colorAccent"> @ color / color_primary </item> Następnie ręcznie zmieniłeś programowo, więc czujesz mrugnięcie
Ashraf
2
zadziałało to dla mnie, ale mój problem polega na tym, że po powrocie z fragmentu aplikacja ulega awarii, gdy otrzymuje powyższy kod zerowy wskaźnik
Akshay Shah,
145

Jeśli wszystkie błystki mogą mieć ten sam kolor tekstu dla elementów TextView, innym podejściem jest użycie niestandardowego stylu dla rozwijanych elementów tarczy:

W 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>

I zdefiniuj swój niestandardowy kolor w res / wartości / colors.xml:

<color name="my_spinner_text_color">#808080</color>
Whypee
źródło
2
A jak zastosować to rozwiązanie do motywu Appcompt? Ściągnąłem go, zastępując motyw nadrzędny „@ style / Widget.AppCompat.DropDownItem.Spinner” i nie wyszło
GyRo
11
Dodałbym również: <item name = "android: spinnerItemStyle"> @ style / mySpinnerItemStyle </item> Zapewnia to, że zwinięty tekst ma ten sam kolor - w przypadku, gdy jest to pożądane zachowanie.
nieskończona pętla
4
dla mnie też nie działa, styl jest całkowicie ignorowany
diogo.abdalla,
1
@Whypee zedytuj swoją odpowiedź zgodnie z sugestiami nieskończonej pętli, to zadziałało dla mnie idealnie
Chintan Desai
4
W przypadku motywu AppCompat po prostu usuń w android:ten sposób<item name="spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
Roman_D,
73

Oto link, który może pomóc Ci zmienić kolor Błystki :

Kliknij tutaj

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

Musisz utworzyć własny plik układu z niestandardową definicją elementu spinner spinner_item.xml :

<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" />

Jeśli chcesz dostosować elementy listy rozwijanej, musisz utworzyć nowy plik układu. 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"/>

I wreszcie kolejna zmiana w deklaracji przędzarki:

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

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

Otóż ​​to.

Niib Fouda
źródło
2
To była zautomatyzowana odpowiedź pochodząca z recenzowania postów przez nowych użytkowników. Cieszę się, że zredagowałeś odpowiedź! :)
Marko,
1
Wygląda na to, że android:textSize="20sp"w pierwszym fragmencie kodu fragment kodu jest bezużyteczny: rozmiar kontrolki zdefiniowano wspinner_item.xml
DenisGL
23

Jeśli pracujesz z Android.support.v7.widget.AppCompatSpinner, oto najprostsze przetestowane rozwiązanie wykorzystujące style:

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

I styl:

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

Jedynym minusem jest Android: backgroundTint ustawia kolor zarówno strzałki rozwijanej, jak i rozwijanego tła.

Voytez
źródło
3
używasz, style="@style/Widget.AppCompat.Spinner.Underlined"ale masz tylko style name="Spinner"...
użytkownik25
1
paddingStartwymaga interfejsu API 17, backgroundTintwymaga interfejsu API 21.
CoolMind
18

Aby zapobiec opóźnieniom, musisz nie tylko ustawić właściwości tekstu w onItemSelecteddetektorze, ale także w onCreatemetodzie działania (ale jest to trochę trudne).

W szczególności należy to ustawić onCreatepo ustawieniu adaptera:

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

A następnie wstaw to onItemSelected:

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

Oto pełny przykład:

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

}  

Aby uzyskać więcej informacji, zobacz moje pytanie .

Rock Lee
źródło
15

Jeśli chcesz zmienić kolor tekstu tylko w wybranym elemencie, może to być możliwe obejście problemu. To działało dla mnie i powinno również działać dla ciebie.

spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
            }
        });
vishal-wadhwa
źródło
6

Dla kogoś, kto potrzebuje tylko Stylesposobu AppCompat.

Wynik
wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

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>

twoja_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
jeśli chcesz ustawić android:entriesprogramowo ze zdefiniowanym stylem.
Spróbuj tego.

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

Podobnie jak w kodzie, najważniejsze jest używanie tego samego Contextz Spinnernajważniejszym.

spinner.getContext()
wonsuc
źródło
5

Aby zmienić kolor tekstu przędzarki:

 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}
Hanisha
źródło
To jest najprostsze i zadziałało dla mnie, dzięki!
Mousa Alfhaily
Lubię to rozwiązanie. to proste i działa dobrze.
korchix
4

Zamiast tworzyć niestandardowy układ, aby uzyskać mały rozmiar, a jeśli chcesz użyć wewnętrznego LAYOUT Androida w małym rozmiarze dla tarczy, powinieneś użyć:

„android.R.layout.simple_gallery_item” zamiast „android.R.layout.simple_spinner_item”.

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

Może zmniejszyć rozmiar układu przędzarki. To tylko prosta sztuczka.

Jeśli chcesz zmniejszyć rozmiar listy rozwijanej, użyj tego:

madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);
Hemant Shori
źródło
4

Najłatwiejszym sposobem ponownego użycia / zmiany zasobów android.R.layout jest po prostu przejście do definicji. W Android Studio wykonaj Ctrl+ Bna android.R.layout.simple_spinner_item.xml.

Zabierze Cię do pliku zasobów. Po prostu skopiuj plik zasobów i dodaj nowy układ do folderu Package.R.layout i zmień kolor tekstu widoku tekstu, jak chcesz, a następnie po prostu wywołaj go w adapterze w następujący sposób:

ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);
ZygoteInit
źródło
4

Dla tych, którzy chcą zmienić DrowDownIconkolor, możesz użyć tego w ten sposób

spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
AMAN SINGH
źródło
możesz spróbować<item name="android:colorControlNormal" tools:targetApi="lollipop">@color/light_gray</item>
AMAN SINGH
dodaj tę linię do swojego styluAppTheme
AMAN SINGH
To był kod, który zadziałałDrawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable(); spinnerDrawable.setColorFilter(getResources().getColor(R.color.md_white_1000), PorterDuff.Mode.SRC_ATOP); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { spinner.setBackground(spinnerDrawable); }else{ spinner.setBackgroundDrawable(spinnerDrawable); }
Edijae Crusar
4

Można zmienić kolor tekstu, zastępując metodę getView w następujący sposób:

 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;
                }
    }
Madhur
źródło
3

Najprostszy: działa dla mnie

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

spinnerText.setTextColor(Color.RED);
Waqar Ahmed Shujrah
źródło
1
spinner.getChildAt (0) zwraca mi wartość null: /
Karl Heinz Brehme Arredondo
2
Myślę, że ta technika dotyczy API 19+.
Jose Manuel Abarca Rodríguez
2
<?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"/>

po prostu użyj tego:

ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
    R.layout.spinner_list_item, categories);
adapter_category
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Santosh
źródło
1

Inną odmianą rozwiązania Ashrafa jest upewnienie się, że bierzesz pod uwagę rozmiary ekranu. Musisz ustawić pokrętło w opcji onCreate i ustawić detektor po ustawieniu adaptera:

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

Następnie możesz zacząć zmieniać rozmiar tekstu widoku wyświetlanego przed kliknięciem pokrętła:

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

    }
};

Wszystko, co musisz zrobić, to utworzyć foldery specyficzne dla układu, takie jak to:

wartości-sw360dp

wartości-sw600dp

wartości-sw800dp

a następnie dodaj plik xml o nazwie „bool.xml” do każdego z tych folderów:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="isTablet">false</bool>
    <bool name="isLargeTablet">false</bool>
</resources>
dlaczego?
źródło
1

Najpierw musimy utworzyć prosty xmlplik zasobów dla textviewtakich jak poniżej:

<?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"
    />   

i zapisz to. po ustawieniu na liście adapterów.

Ishor Neupane
źródło
1

możesz mieć ten typ adaptera do tarczy, całkowicie dostosowany:

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

podczas gdy R.layout.spinner_text to:

<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" />
czarny Jastrząb
źródło
1

Jeśli chcesz prostej metody, aby dodać elementy do listy rozwijanej, zwykle dodajesz je do pliku strings.xml. Oto przykład dodawania koloru za pomocą pliku strings.xml:

WYBIERZ ZAKRES WIEKU

<string-array name="age_array">

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

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

</string-array>
Jamie
źródło
słodka sztuczka ... przydatna i szybka jak na jednorazowy spinner, kolor musi być ciągiem surowej wartości koloru nie z xml
me_
0

Zrobiłem to w następujący sposób. Korzystam z metod getDropDownView () i getView ().

Użyj getDropDownView()dla otwartego Spinnera.

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

I użyj getView()do zamkniętego pokrętła.

@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;
}
Bhavinkumar Patel
źródło
Jest to odpowiednio przetestowany kod i działał w aplikacji w
AppStore
0

Wypróbuj tę metodę. To działa dla mnie.

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    TextView textView = (TextView) view;
    ((TextView) adapterView.getChildAt(0)).setTextColor(Color.RED);
    ((TextView) adapterView.getChildAt(0)).setTextSize(20);
    Toast.makeText(this, textView.getText()+" Selected", Toast.LENGTH_SHORT).show();
}
Tushar Lathiya
źródło
0

po prostu dodaj nowy styl:

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

i użyj go:

<Spinner
      android:id="@+id/spinnerCategories"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      style="@style/mySpinnerItemStyle"
      android:layout_margin="5dp" />
Elyas Nategh
źródło
0
    String typeroutes[] = {"Select","Direct","Non Stop"};
    Spinner typeroute;

    typeroute = view.findViewById(R.id.typeroute);

    final ArrayAdapter<String> arrayAdapter5 = new ArrayAdapter<String>(
                getActivity(), android.R.layout.simple_spinner_item, typeroutes) {
            @Override
            public boolean isEnabled(int position) {
                if (position == 0) {
                    // Disable the first item from Spinner
                    // First item will be use for hint
                    return false;
                } else {
                    return true;
                }
            }

            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("#ffffff"));
                return v;
            }         ---->in this line very important so add this

            @Override
            public View getDropDownView(int position, View convertView,
                                        ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
                TextView tv = (TextView) view;
                if (position == 0) {
                    // Set the hint text color gray
                    tv.setTextColor(Color.GRAY);
                } else {
                    tv.setTextColor(Color.BLACK);
                }
                return view;
            }
        };

        arrayAdapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        typeroute.setAdapter(arrayAdapter5);

to wszystko cieszy kodowanie ...

mahendren
źródło