Цвет текста закрытого счетчика

Я понимаю, что закрытая прядильница на самом деле является View, я думаю. Но я предполагаю, что там есть TextView где-то, чтобы показать текст. Как получить доступ к этому TextView, чтобы я мог изменить цвет текста?

EDIT: мне нужно изменить это программно "на лету", а не в XML.

TextView v = (TextView) getView(mySpinner);

v.setTextColor(.....

Это не работает...

Спасибо!

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

Ответ 1

Я понимаю, что закрытый прядильщик на самом деле является View, я думаю.

Да. В частности, это то, что вы сказали создать SpinnerAdapter.

Но я предполагаю, что TextView там где-то, чтобы показать текст.

Это будет зависеть от того, что вы сказали создать SpinnerAdapter.

Как получить доступ к этому TextView, чтобы я мог изменить цвет текста?

В идеале вы этого не сделаете - вы даете ему правильный цвет в первую очередь, используя все, что вы сказали, чтобы ваш SpinnerAdapter создавал. Если цвет меняется, переопределите getView() в SpinnerAdapter и измените цвет в этой точке.

В крайнем случае вы можете попробовать позвонить getSelectedView(), чтобы получить текущую View, отображаемую закрытым Spinner, но любое изменение, которое вы делаете здесь, может быть устранено при следующем выборе пользователя, а альтернативный цвет может верните позже, если предыдущий View будет возвращен.

Ответ 2

Чтобы изменить цвет текста, создайте новый xml файл в папке res/layout (например, my_spinner_text.xml). Добавьте текстовый вид в новый XML файл и измените, как вы хотите:

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

Создайте ArrayAdapter, который использует новый TextView и установите его на свой счетчик:

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

Ответ 3

Вы можете изменить цвет текста или получить доступ к текстовому полю в событии setOnItemSelectedListener,

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

            }

Ответ 4

чтобы сделать это программно, вам необходимо расширить класс адаптера, например:

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

Ответ 5

Для изменения Textcolor закрытого 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;
}

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

Ответ 6

Просто попробуйте это:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ((TextView)parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.colorPrimary));