Android 闭合微调器的文本颜色

Android 闭合微调器的文本颜色,android,spinner,textcolor,Android,Spinner,Textcolor,我知道关闭的微调器实际上是一个视图,我想。但是我猜它有一个文本视图可以显示文本。如何访问该文本视图,以便更改文本颜色 编辑:我需要以编程方式动态更改此内容,而不是在XML中进行更改。 TextView v = (TextView) getView(mySpinner); v.setTextColor(..... 这不管用 谢谢大家! array_typ=new String[5]; array_typ[0]="Pressure"; array_typ[1]="Leve

我知道关闭的微调器实际上是一个
视图
,我想。但是我猜它有一个
文本视图
可以显示文本。如何访问该
文本视图
,以便更改文本颜色

编辑:我需要以编程方式动态更改此内容,而不是在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);
array_typ=新字符串[5];
数组类型[0]=“压力”;
数组类型[1]=“级别”;
数组类型[2]=“超龄”;
数组_typ[3]=“下”;
数组_typ[4]=“take”;
adaptertyp=new ArrayAdapter(此,R.layout.simple\u微调器\u项,数组\u类型);
典型设置适配器(适配器类型);
我知道闭合旋转器实际上是一个视图,我想

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

但我猜它在某处有一个文本视图来显示文本

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

如何访问该文本视图以便更改文本颜色

理想情况下,你不需要——你首先要给它正确的颜色,不管你告诉你的
SpinnerAdapter
创建什么。如果颜色不同,请覆盖
SpinnerAdapter
中的
getView()
,并在该点更改颜色


在紧急情况下,您可以尝试调用
getSelectedView()
,以获取关闭的
微调器所显示的当前
视图
,但您在此处所做的任何更改都可能在用户下一次选择时被取消,如果较早的
视图被回收,则备用颜色可能稍后返回。

要修改文本颜色,请在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);
Spinner localSpinner=(Spinner)findViewById(R.id.mySpinner);
ArrayAdapter=ArrayAdapter.createFromResource(此,
R.array.spinner\u数组,
R.layout.my_微调器(文本);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
setAdapter(适配器);

要以编程方式执行此操作,必须扩展适配器类,例如:

    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        
        }
    }
ArrayAdapter adapter=新的ArrayAdater(此){
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视图v=super.getView(位置、转换视图、父级);
//在这里更改v的颜色
v、 等等等等等等
}
}

您可以更改文本颜色,也可以在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));   

            }
spinnerObject.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249249249));
}

要更改关闭微调器的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;
}

试试这个:

public void已选择(AdapterView父视图、视图视图、int位置、长id){
((TextView)parent.getChildAt(0)).setTextColor(getResources().getColor(R.color.colorPrimary));

你不能在它的XML文件中定义颜色吗?我在上面添加了如何创建微调器。我对Android和Java非常陌生,所以即使你的答案听起来像是有答案,我也不知道输入什么。你能给我看几行代码让我更改文本颜色吗?谢谢!!!@Mark Worsnop:“我在上面添加了创建微调器的方法。”--查看您的
R.layout.simple\u spinner\u item
资源并更改其中的颜色。@Mark Worsnop:然后您需要覆盖
getView()
并自定义您的
文本视图的颜色,作为该过程的一部分。在此评论的最后是一个链接,指向我的一本书中讨论此过程的免费摘录。它是在
列表视图
的上下文中实现的,但相同的概念在这里也适用。谢谢您,我确实非常感谢您的帮助!谢谢您花时间!'对我来说,我必须在xml文件中添加一个名称空间,您引用的网站似乎处于脱机状态。@ala请修复您评论中的链接。@Diederik,如果您引用的是。它不是URI链接,而只是xml元素的架构名称空间,并不指向任何网站。Eclipse建议添加名称空间来解决此问题我有一个问题。我更新了Vito的答案以包含名称空间。但是,如果您指的是,恐怕我没有建议使用此链接。也许Vito可以在这方面提供帮助。我看到了一个
setBackgroundColor()
,但没有
setTextColor()
这很有效!Budius的建议没有起作用,因为我无法设置文本颜色。这似乎效率低下-每次都设置颜色。通过扩展
ArrayAdapter
并覆盖
getDropDownView()
,可以一次在微调器中的所有项目上设置颜色。