2011-02-02 2 views
21

Я понимаю, что закрытый прядильщик на самом деле 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); 
+0

не могли бы вы определить цвет в его файле XML? – gnclmorais

ответ

9

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

Да. В частности, это то, что вы сказали своему SpinnerAdapter для создания.

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

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

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

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

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

+0

Я добавил, как я создаю счетчик выше. Я действительно новичок в Android и Java, поэтому, хотя ваш ответ звучит так, будто есть ответ, я не знаю, что ввести. Можете ли вы показать мне пару строк кода, которые позволят мне изменить цвет текста? благодаря!!! –

+0

@Mark Worsnop: «Я добавил, как я создаю спиннер выше». - взгляните на свой ресурс 'R.layout.simple_spinner_item' и измените цвет там. – CommonsWare

+0

Мне нужно изменить его программно ... –

33

Чтобы изменить цвет текста, создайте новый 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); 
+0

Мне нужно иметь возможность изменять цвета в приложении программно ... –

+1

Мне нужно было добавить пространство имен в xml-файл ala

+4

Ваш веб-сайт, на который вы ссылаетесь, не работает. – rekire

1

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

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

Я вижу 'setBackgroundColor()', но не 'setTextColor()' –

23

Вы можете изменить цвет текста или может получить доступ к TextView в 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)); 

      } 
+0

это работает! То, что предложил Будиус, не потому, что я не мог установить цвет текста. –

+0

Это кажется неэффективным - установка цвета каждый раз. Вы можете установить цвет для всех элементов в счетчике сразу, расширив 'ArrayAdapter' и переопределив' getDropDownView() '. –

0

Для перемен 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; 
} 
Смежные вопросы