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

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

person Mark Worsnop    schedule 02.02.2011    source источник
comment
Не могли бы вы определить цвет в его XML-файле?   -  person gnclmorais    schedule 03.02.2011


Ответы (6)


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

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

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

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

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

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

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

person CommonsWare    schedule 02.02.2011
comment
Я добавил, как я создаю счетчик выше. Я действительно новичок в Android и Java, поэтому, хотя ваш ответ звучит так, будто ответ есть, я не знаю, что вводить. Можете ли вы показать мне пару строк кода, которые позволят мне изменить цвет текста? Благодарность!!! - person Mark Worsnop; 03.02.2011
comment
@Mark Worsnop: я добавил выше, как я создаю счетчик. -- взгляните на свой ресурс R.layout.simple_spinner_item и измените там цвет. - person CommonsWare; 03.02.2011
comment
@Mark Worsnop: Тогда вам нужно переопределить getView() и настроить цвет вашего TextView как часть этого процесса. В конце этого комментария есть ссылка на бесплатную выдержку из одной из моих книг, в которой обсуждается этот процесс. Это происходит в контексте ListView, но здесь будет применяться та же концепция. commonsware.com/Android/excerpt.pdf - person CommonsWare; 03.02.2011
comment
Спасибо, я действительно ценю вашу помощь! Спасибо, что нашли время!' - person Mark Worsnop; 09.02.2011

Чтобы изменить цвет текста, создайте новый 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);
person Vito    schedule 02.02.2011
comment
для меня мне пришлось добавить пространство имен в файл xml ‹?xml version=1.0 encoding=utf-8?› ‹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=schemas.android. com/apk/res/android - person ala; 23.07.2011
comment
Сайт, на который вы ссылаетесь, кажется, не в сети. - person rekire; 17.11.2011
comment
@ala, пожалуйста, исправьте ссылку в своем комментарии. - person Diederik; 22.10.2012
comment
@Diederik, если вы имеете в виду schemas.android.com/apk/res/android. Это не ссылка URI, а просто пространство имен схемы для элемента XML, и она не предназначена для указания на какой-либо веб-сайт. Добавление пространства имен было предложено Eclipse для решения проблемы, с которой я столкнулся. Я обновил ответ Вито, включив в него пространство имен. Однако, если вы имеете в виду designerandroid.com/?p=28, я не предлагать эту ссылку, я боюсь. Может быть, Вито может помочь в этом. - person ala; 23.10.2012

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

            }
person Rukmal Dias    schedule 31.01.2012
comment
это работает ! То, что предложил Будиус, не помогло, потому что я не мог установить цвет текста. - person Someone Somewhere; 07.03.2013
comment
Это кажется неэффективным - каждый раз задавать цвет. Вы можете установить цвет сразу для всех элементов счетчика, расширив ArrayAdapter и переопределив getDropDownView(). - person IgorGanapolsky; 14.10.2015

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

    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        
        }
    }
person Budius    schedule 31.08.2011
comment
Я вижу setBackgroundColor(), но не setTextColor() - person Someone Somewhere; 07.03.2013

Для изменения цвета текста закрытого 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;
}
person Bhavinkumar Patel    schedule 14.12.2015

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

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

person Yeuni    schedule 20.09.2019