【问题标题】:Text color of a closed spinner关闭的微调器的文本颜色
【发布时间】:2011-06-20 07:21:54
【问题描述】:

我知道封​​闭的微调器实际上是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);

【问题讨论】:

  • 你不能在它的 XML 文件中定义颜色吗?

标签: android spinner textcolor


【解决方案1】:

我认为,关闭的微调器实际上是一个视图。

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

但我猜它在某处有一个 TextView 来显示文本。

这取决于你告诉你的SpinnerAdapter 创建什么。

如何访问该 TextView 以便更改文本颜色?

理想情况下,您不需要 - 首先通过您告诉您的 SpinnerAdapter 创建的任何内容为其赋予正确的颜色。如果颜色不同,请覆盖 SpinnerAdapter 中的 getView() 并在该点更改颜色。

在紧要关头,您可以尝试调用getSelectedView() 以使当前的View 显示为关闭的Spinner,但是您在此处所做的任何更改都可能在用户的下一次选择中被消除,并且替代颜色可能如果较早的 View 被回收,请稍后返回。

【讨论】:

  • 我在上面添加了如何创建微调器。我对 Android 和 Java 真的很陌生,所以即使你的答案听起来像是有一个答案,我也不知道该输入什么。你能告诉我几行代码让我改变文本颜色吗?谢谢!!!
  • @Mark Worsnop:“我在上面添加了创建微调器的方式。” -- 查看您的 R.layout.simple_spinner_item 资源并更改其中的颜色。
  • @Mark Worsnop:然后您需要覆盖getView() 并自定义TextView 的颜色作为该过程的一部分。在此评论的末尾是我的一本书中讨论此过程的免费摘录的链接。它在ListView 的上下文中这样做,但同样的概念也适用于此。 commonsware.com/Android/excerpt.pdf
  • 谢谢你,我非常感谢你的帮助!感谢您抽出宝贵时间!'
【解决方案2】:

要修改文本颜色,请在 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);

【讨论】:

  • 对我来说,我必须在 xml 文件中添加一个命名空间 schemas.android.com/apk/res/android">
  • 您推荐的网站似乎下线了。
  • @ala 请修复您评论中的链接。
  • @Diederik 如果您指的是schemas.android.com/apk/res/android。它不是 URI 链接,而只是 XML 元素的模式命名空间,并不意味着指向任何网站。 Eclipse 建议添加命名空间来解决我遇到的问题。我更新了 Vito 的答案以包含命名空间。但是,如果您指的是designerandroid.com/?p=28,恐怕我没有建议这个链接。也许 Vito 可以在这方面提供帮助。
【解决方案3】:

要以编程方式进行,您必须扩展适配器类,例如:

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

【讨论】:

  • 我看到setBackgroundColor(),但没有看到setTextColor()
【解决方案4】:

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

            }

【讨论】:

  • 这行得通! Budius 的建议没有,因为我无法设置文本颜色。
  • 这似乎效率低下 - 每次都设置颜色。您可以通过扩展 ArrayAdapter 并覆盖 getDropDownView() 来一次设置微调器中所有项目的颜色。
【解决方案5】:

对于更改已关闭 Spinner 的 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;
}

【讨论】:

    【解决方案6】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      相关资源
      最近更新 更多