【问题标题】:How to change the Spinner font color?如何更改 Spinner 字体颜色?
【发布时间】:2011-05-20 16:23:08
【问题描述】:

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

这是我目前填充微调器的方式。 Droid 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);

【问题讨论】:

    标签: android spinner


    【解决方案1】:

    您也可以尝试这种方法,其中添加 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>
    

    编码愉快!! :)

    【讨论】:

      【解决方案2】:

      这里有更合适的方式,伙计们,

      首先在你的系统中找到“simple_spinner_item.xml”文件, 按照下面的路径, C:\Users[用户名]\AppData\Local\Android\sdk\platforms[android-23]\data\res\layout

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

      第二次在你的项目 res\layout 文件夹中创建 custom_spinner.xml 文件

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

      示例如下:

      res\layout\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 是列表

      谢谢, 埃贾兹·瓦基夫

      【讨论】:

      • 这不是问题的答案
      【解决方案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 文件:输入 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】:

        写一个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);
        

        【讨论】:

        • 如果微调器的项目是使用条目属性从 加载的,你如何使用它?
        【解决方案5】:

        简单明快...

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

        【讨论】:

        • 这会在您旋转设备时导致 TextView 为空。
        【解决方案6】:

        我将使用 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内置的布局资源,所以它也知道文本会放在id为android.R.id.text1TextView中。这就是为什么它可以拦截下拉列表中视图的创建并将文本颜色更改为所需的任何颜色。


        截图:

        【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-05-18
            • 1970-01-01
            • 1970-01-01
            • 2012-02-20
            • 2011-06-19
            • 1970-01-01
            • 2013-01-27
            • 1970-01-01
            相关资源
            最近更新 更多