封闭式微调器的文本颜色

时间:2011-02-02 22:02:31

标签: android spinner textcolor

据我所知,封闭的微调器实际上是View。但我猜它有一个TextView在那里显示文本。如何访问TextView以便我可以更改文本颜色?

编辑:我需要动态地以编程方式更改此内容,而不是在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);

6 个答案:

答案 0 :(得分:33)

要修改文本颜色,请在res / layout文件夹中创建一个新的xml文件(例如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"/>

创建一个使用新TextView并将其设置为微调器的ArrayAdapter:

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

答案 1 :(得分:23)

您可以更改文本颜色或访问setOnItemSelectedListener事件中的textview,

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

            }

答案 2 :(得分:9)

  

据我所知,封闭的微调器实际上是一个视图。

是。具体来说,这是您告诉SpinnerAdapter创建的任何内容。

  

但是我猜它有一个TextView在那里显示文本。

这取决于您告诉SpinnerAdapter创建的内容。

  

如何访问该TextView以便我可以更改textcolor?

理想情况下,您不会 - 通过您告诉SpinnerAdapter创建的任何内容,首先给它正确的颜色。如果颜色发生变化,请覆盖getView()中的SpinnerAdapter并更改此时的颜色。

在紧要关头,您可以尝试拨打getSelectedView()来获取已关闭的View显示的当前Spinner,但您在此处所做的任何更改都可能会在用户的下一个选择中被删除如果较早的View被回收,则备用颜色可能会稍后返回。

答案 3 :(得分: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        
        }
    }

答案 4 :(得分:0)

对于关闭Spinner的Change Textcolor,我这样做是有效的

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

答案 5 :(得分:0)

只需尝试以下操作:

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