Как изменить цвет шрифта Spinner? - PullRequest
22 голосов
/ 06 декабря 2010

У меня проблема с телефонами Droid X, когда пользователи говорят, что цвет шрифта в блесне оказывается белым, что делает его невидимым, если пользователи не выделят элементы. Другие телефоны, похоже, не имеют этой проблемы. Я собирался попытаться заставить шрифт быть черным, чтобы видеть, помогает ли это. Как я могу это сделать?

Вот как я сейчас заполняю счетчик. Похоже, что simple_spinner_item не работает на Droid X.

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

Ответы [ 7 ]

46 голосов
/ 12 июля 2011

Я собираюсь использовать Spinner пример проекта из Android SDK для следующих примеров кода.


Код :

Сначала вам нужносоздайте свой пользовательский адаптер, который будет перехватывать создание представлений в выпадающем списке:

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;

    }
}

Затем вы создаете адаптер в своем коде так:

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

Объяснение:

Поскольку CustomArrayAdapter знает, что мы используем встроенный ресурс макета Android, он также знает, что текст будет помещен в TextView с идентификатором android.R.id.text1.Вот почему он может перехватывать создание представлений в раскрывающемся списке и изменять цвет текста на любой необходимый.


Снимок экрана:

enter image description here

7 голосов
/ 06 декабря 2012

написать 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" />

Идентификатор android:id="@android:id/text1", установить цвет шрифта и фона.

ArrayAdapter adapter =
  new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry);
7 голосов
/ 10 сентября 2012

Простой и четкий ...

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) {
  }
};
3 голосов
/ 01 сентября 2013
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);

}  
}

и в xml res / layout добавьте новый файл xml: тип layout, spinner

(в 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" />
2 голосов
/ 06 июля 2011

Чтобы добавить к ответу sasad, сделайте копию этого файла, которую вы можете найти в папке Android, в своем проекте, измените цвет текста TextView в этом файле и используйте этот макет при инициализации адаптера вместо андроид.

0 голосов
/ 08 октября 2016

Вот более подходящий способ, ребята,

Сначала найдите файл "simple_spinner_item.xml" в вашей системе, Следуйте ниже пути, C: \ Users [имя пользователя] \ AppData \ Local \ Android \ SDK \ платформы [андроида-23] \ данные \ Рез \ раскладка

Теперь скопируйте содержимое файла "simple_spinner_item.xml"

Затем создайте файл custom_spinner.xml в папке проекта res \ layout

и вставьте скопированный контент в недавно созданный файл

Вот пример:

Рез \ расположение \ custom_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView android:textAlignment="inherit"
    android:ellipsize="marquee"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:singleLine="true"
    android:textColor="@color/dark_gray"
    style="?android:attr/spinnerItemStyle"
    android:id="@android:id/text1" xmlns:android="http://schemas.android.com/apk/res/android"/>

Вот код установленного адаптера:

Spinner ddlArea = (Spinner) findViewById(R.id.ddlArea);

ddlArea.setAdapter(new ArrayAdapter<String>(this, R.layout.custom_spinner, areaList));

Где areaList - это список

Спасибо, Эджаз Вакиф

0 голосов
/ 06 декабря 2010

создайте свой собственный макет XML-файла и укажите андроид: textColor = "# 000" для черного текста

...