如何更改Spinner字体颜色?

时间:2010-12-05 22:20:19

标签: android spinner

我遇到了Droid X手机的问题,用户说旋转器中的字体颜色变成白色,除非用户突出显示项目,否则它将不可见。没有其他手机似乎有这个问题。我打算尝试将字体强制为黑色以查看是否有帮助。我怎样才能做到这一点?

以下是我目前填充微调器的方法。似乎{D} X上的simple_spinner_item被打破了。

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,android.R.layout.simple_spinner_item, spin_arry);

8 个答案:

答案 0 :(得分:46)

我将使用Android SDK中的Spinner项目示例获取下一代码示例。


<强>代码

首先,您需要创建自定义适配器,它将截取下拉列表中的视图创建:

static class CustomArrayAdapter<T> extends ArrayAdapter<T>
{
    public CustomArrayAdapter(Context ctx, T [] objects)
    {
        super(ctx, android.R.layout.simple_spinner_item, objects);
    }

    //other constructors

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View view = super.getView(position, convertView, parent);

        //we know that simple_spinner_item has android.R.id.text1 TextView:         

        /* if(isDroidX) {*/
            TextView text = (TextView)view.findViewById(android.R.id.text1);
            text.setTextColor(Color.RED);//choose your color :)         
        /*}*/

        return view;

    }
}

然后在代码中创建适配器,如下所示:

 String [] spin_arry = getResources().getStringArray(R.array.Planets);        
 this.mAdapter = new CustomArrayAdapter<CharSequence>(this, spin_arry);

<强>解释

因为CustomArrayAdapter知道我们使用了android的内置布局资源,所以它也知道文本将被放置在标识为TextView的{​​{1}}中。这就是为什么它可以截取下拉列表中的视图创建并将文本颜色更改为所需的任何颜色。


屏幕截图:

enter image description here

答案 1 :(得分:7)

简单明了......

private OnItemSelectedListener OnCatSpinnerCL = new AdapterView.OnItemSelectedListener() {
  public void onItemSelected(AdapterView<?> parent, View view, int pos,
        long id) {
    ((TextView) parent.getChildAt(0)).setTextColor(Color.BLUE);
    ((TextView) parent.getChildAt(0)).setTextSize(5);
  }

  public void onNothingSelected(AdapterView<?> parent) {
  }
};

答案 2 :(得分:7)

写一个R.layout.simplespinneritem:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

ID为android:id="@android:id/text1",设置字体和背景的颜色。

ArrayAdapter adapter =
  new ArrayAdapter(this,packagename.R.layout.simple_spinner_item, spin_arry);

答案 3 :(得分:3)

public class ee extends Activity{
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ww);
addListenerOnSpinnerItemSelection();

}
public void addListenerOnSpinnerItemSelection(){

    ArrayList<String> array = new ArrayList<String>();
    array.add("item0");
    Spinner spinner1;
    ArrayAdapter<String> mAdapter;
    spinner1= (Spinner) findViewById(R.id.spinner2);
    spinner1= new ArrayAdapter<String>(this, R.layout.spinner_item, array);
    spinner1.setAdapter(mAdapter);

}  
}

并在xml res / layout中添加新的xml文件:type layout,spinner

(在spinner_item.xml中)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="top"
    android:singleLine="true"
    android:textColor="#00f0ff" />

答案 4 :(得分:2)

要添加到sasad的回复,请在项目中制作该文件的副本(可在Android文件夹中找到),更改该文件中TextView的文本颜色,并在初始化适配器时使用该布局而不是机器人的。

答案 5 :(得分:0)

您也可以尝试这种方法,其中添加2个新的布局资源文件

  1. Custom_spinner_list_item
  2. Custom_spinner_dropdown_item

并在代码中使用它们。

String spin_arry[] = new String[str_vec.size()];
str_vec.copyInto(spin_arry);
ArrayAdapter adapter =
    new ArrayAdapter(this,R.layout.custom_simple_spinner_item, spin_arry);
adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item);

custom_spinner_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:fontFamily="@font/roman"
    android:singleLine="true"
    android:textAlignment="inherit"
    android:textColor="@color/black"
    android:textSize="14sp">

</TextView>

custom_spinner_dropdown_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    style="?attr/spinnerDropDownItemStyle"
    android:layout_width="match_parent"
    android:layout_height="?attr/dropdownListPreferredItemHeight"
    android:ellipsize="marquee"
    android:fontFamily="@font/roman"
    android:singleLine="true"
    android:textAlignment="textStart"
    android:textColor="@color/black"
    android:textSize="14sp">

</TextView>

快乐编码! :)

答案 6 :(得分:-1)

制作自己的布局xml文件,并为黑色文本提供android:textColor =“#000”

答案 7 :(得分:-1)

这是更合适的方式,

首先在系统中找到“simple_spinner_item.xml”文件, 按照以下路径, C:\用户[用户名] \应用程序数据\本地\的Android \ SDK \平台[机器人-23] \数据\ RES \布局

现在复制“simple_spinner_item.xml”文件的内容

其次,在项目res \ layout文件夹

中创建custom_spinner.xml文件

并将复制的内容粘贴到最近创建的文件

以下是样本:

RES \布局\ custom_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView android:textAlignment="inherit"
    android:ellipsize="marquee"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:singleLine="true"
    android:textColor="@color/dark_gray"
    style="?android:attr/spinnerItemStyle"
    android:id="@android:id/text1" xmlns:android="http://schemas.android.com/apk/res/android"/>

以下是设置的适配器代码:

Spinner ddlArea = (Spinner) findViewById(R.id.ddlArea);

ddlArea.setAdapter(new ArrayAdapter<String>(this, R.layout.custom_spinner, areaList));

其中areaList是List

谢谢, Ejaz Waquif