首页 文章

如何更改微调文本大小和文本颜色?

提问于
浏览
360

在我的Android应用程序中,我正在使用微调器,并且我已经将SQLite数据库中的数据加载到微调器中,并且它正常工作 . 这是代码 .

Spinner spinner = (Spinner) this.findViewById(R.id.spinner1);
List<String> list = new ArrayList<String>();
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>  (this,android.R.layout.simple_spinner_item, list);
cursor.moveToFirst();

list.add("All Lists");

if (cursor.getCount() > 0) {
    for (int i = 0; i < cursor.getCount(); i++) {
        keyList[i] = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.KEYWORD));
        list.add(keyList[i]);
        cursor.moveToNext();
    }
}
Database.close();
cursor.close();
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapter);

现在我想更改微调器数据的文本颜色和文本大小 . 我在我的XML文件上使用了以下XML行到我的spinner标签,但它不起作用 .

android:textColor="@android:color/white"
android:textSize="11dp"

如何更改微调器的文本颜色和文本大小?

21 回答

  • 15

    为您的微调器项创建自定义XML文件 .

    spinner_item.xml:

    为此文件中的文本提供自定义颜色和大小 .

    <?xml version="1.0" encoding="utf-8"?>
    
    <TextView  
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="left"  
        android:textColor="#FF0000"         
        android:padding="5dip"
        />
    

    现在使用此文件显示您的微调器项目,如:

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_item,list);
    

    您无需设置下拉资源 . 只需要 spinner_item.xml 即可在微调器中显示您的商品 .

  • -2

    简单明快......:

    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

    如果所有微调器的TextView项目可能具有相同的文本颜色,则另一种方法是为微调器下拉项目使用自定义样式:

    res/values/styles.xml

    <resources>
        <style name="AppBaseTheme" parent="android:Theme.Light">
        </style>
    
        <style name="AppTheme" parent="AppBaseTheme">
            <item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
        </style>
    
        <style name="mySpinnerItemStyle" parent="@android:style/Widget.Holo.DropDownItem.Spinner">
            <item name="android:textColor">@color/my_spinner_text_color</item>
        </style>
    </resources>
    

    并在res / values / colors.xml中定义自定义颜色:

    <color name="my_spinner_text_color">#808080</color>
    
  • 0

    这是一个可以帮助您 change the color of the Spinner 的链接:

    Click here

    <Spinner
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:textSize="20sp"
        android:entries="@array/planets"/>
    

    您需要使用微调器项 spinner_item.xml 的自定义定义创建自己的布局文件:

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#ff0000" />
    

    如果要自定义下拉列表项,则需要创建新的布局文件 . spinner_dropdown_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        android:maxLines="1"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:ellipsize="marquee"
        android:textColor="#aa66cc"/>
    

    最后是微调器声明的另一个变化:

    ArrayAdapter adapter = ArrayAdapter.createFromResource(this,
    R.array.planets_array, R.layout.spinner_item);
    
    adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
    spinner.setAdapter(adapter);
    

    而已 .

  • 0

    要防止滞后,您不仅需要在 onItemSelected 侦听器中设置文本属性,还需要在Activity的 onCreate 方法中设置文本属性(但这有点棘手) .

    具体来说,您需要在设置适配器后将其放在 onCreate 中:

    spinner.setSelection(0, true);
    View v = spinner.getSelectedView();
    ((TextView)v).setTextColor(backgroundColor);
    

    然后把它放在 onItemSelected 中:

    ((TextView) view).setTextColor(backgroundColor);
    

    这是一个完整的例子:

    @Override  
    protected void onCreate(Bundle savedInstanceState)
    {  
        Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    
        //Set the choices on the spinner by setting the adapter.  
        spinner.setAdapter(new SpinnerAdapter(toolbar.getContext(), new String[]{"Overview", "Story", "Specifications", "Poll", "Video"}, accentColor, backgroundColor));
    
        //Set the text color of the Spinner's selected view (not a drop down list view) 
        spinner.setSelection(0, true);
        View v = spinner.getSelectedView();
        ((TextView)v).setTextColor(backgroundColor);
    
        //Set the listener for when each option is clicked.  
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {  
    
            @Override  
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {  
               //Change the selected item's text color  
               ((TextView) view).setTextColor(backgroundColor);
            }  
    
            @Override  
            public void onNothingSelected(AdapterView<?> parent)
            {  
            }  
        });  
    
    }
    

    有关更多详细信息,请参阅my question .

  • 62

    如果您希望文本颜色仅在所选项目中更改,那么这可能是一种可能的解决方法 . 它对我有用,也适合你 .

    spinner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    ((TextView) spinner.getSelectedView()).setTextColor(Color.WHITE);
                }
            });
    
  • 3

    如果您使用android.support.v7.widget.AppCompatSpinner,这是使用样式的最简单的测试解决方案:

    <android.support.v7.widget.AppCompatSpinner
                        android:id="@+id/spefcialFx"
                        style="@style/Widget.AppCompat.Spinner.Underlined"
                        android:layout_width="200dp"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="4dp"
                        android:theme="@style/Spinner"
                        android:entries="@array/special_fx_arrays"
                        android:textSize="@dimen/text_size_normal"></android.support.v7.widget.AppCompatSpinner>
    

    风格:

    <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
            <item name="android:paddingStart">0dp</item>
            <item name="android:paddingEnd">0dp</item>
            <item name="android:textColor">@color/white</item>
            <item name="android:backgroundTint">@color/red</item>
            <item name="android:textSize">14sp</item>
        </style>
    

    唯一的缺点是android:backgroundTint为下拉箭头和下拉背景设置颜色 .

  • 1

    而不是制作自定义布局以获得小尺寸,如果您想为微调器使用Android的内部小尺寸LAYOUT,您应该使用:

    “android.R.layout.simple_gallery_item”而不是“android.R.layout.simple_spinner_item” .

    ArrayAdapter<CharSequence> madaptor = ArrayAdapter
                .createFromResource(rootView.getContext(),
                                    R.array.String_visitor,
                                    android.R.layout.simple_gallery_item);
    

    它可以减小微调器布局的大小 . 这只是一个简单的伎俩 .

    如果要减小下拉列表的大小,请使用以下命令:

    madaptor.setDropDownViewResource(android.R.layout.simple_gallery_item);
    
  • 0

    对于那些想要改变 DrowDownIcon 颜色的人,可以像这样使用

    spinner.getBackground().setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP);
    
  • 3

    对于只需 Style 方式 AppCompat 的人 .

    Result

    enter image description here

    enter image description here

    styles.xml

    <resources>
        ... 
        <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
            <item name="android:paddingStart">0dp</item>
            <item name="android:paddingEnd">0dp</item>
            <item name="android:textColor">@color/material_grey_700</item>
            <item name="android:textSize">12sp</item>
        </style>
    </resources>
    

    your_spinner_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
        ...
    
        <android.support.v7.widget.AppCompatSpinner
            android:id="@+id/content_spinner"
            style="@style/Widget.AppCompat.Spinner.Underlined"
            android:layout_width="140dp"
            android:layout_height="wrap_content"
            android:entries="@array/shipping_tracking_carrier_names"
            android:spinnerMode="dropdown"
            android:theme="@style/Spinner" />
    
        <EditText
            android:id="@+id/content_input"
            android:layout_width="140dp"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:maxLines="1"
            android:paddingEnd="8dp"
            android:paddingStart="8dp"
            android:textColor="@color/material_grey_700"
            android:textSize="12sp" />
    
        ...
    </LinearLayout>
    

    Plus
    如果要以定义的样式以编程方式设置 android:entries .
    试试这个 .

    AppCompatSpinner spinner = findViewById(R.id.content_spinner);
    CharSequence[] entries = getResources().getTextArray(R.array.shipping_tracking_carrier_names);
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(spinner.getContext(), android.R.layout.simple_spinner_item, entries);
    adapter.setDropDownViewResource(android.support.v7.appcompat.R.layout.support_simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    

    与在代码中一样,使用与 Spinner 相同的 Context 是最重要的事情 .

    spinner.getContext()
    
  • 0

    最简单:适合我

    TextView spinnerText = (TextView) spinner.getChildAt(0);
    
    spinnerText.setTextColor(Color.RED);
    
  • 0

    重新使用/更改android.R.layout资源的最简单方法就是定义 . 在Android Studio中,在android.R.layout.simple_spinner_item.xml上执行Ctrl B.

    它将带您到资源文件 . 只需复制资源文件并在Package.R.layout文件夹中添加一个新布局,然后根据需要更改textview的textColor,然后在适配器中调用它,如下所示:

    ArrayAdapter<String> adapter = new ArrayAdapter<String(Context,R.layout.spinner_item, spinnerlist);
    
  • 1
    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@android:id/text1"
        style="?android:attr/spinnerItemStyle"
        android:singleLine="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#fff"
        android:ellipsize="marquee"
        android:textAlignment="inherit"/>
    

    只是用这个:

    ArrayAdapter<String> adapter_category = new ArrayAdapter<String>(this,
        R.layout.spinner_list_item, categories);
    adapter_category
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
  • 672

    首先,我们必须为 textview 创建简单的 xml 资源文件,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    
     <TextView  
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="left"  
        android:textColor="#FF0000"         
        android:padding="5dip"
        />
    

    并保存 . 在您的适配器列表上设置之后 .

  • 162

    如果您想要一个简单的方法,为了将项添加到下拉列表中,通常会将它们添加到strings.xml中 . 以下是使用strings.xml文件添加颜色的示例:

    选择年龄范围

    <string-array name="age_array">
    
       <item> 0-6 </item>                               //No custom colour
    
      <item><font fgcolor='#FF4CD964'> 12+ </font></item> //With custom colour
    
    </string-array>
    
  • 126

    Ashraf解决方案的另一个变体是确保您考虑屏幕尺寸 . 您需要在onCreate中获取微调器并在设置适配器后设置侦听器:

    //set your adapter with default or custom spinner cell, then://
    serverSpinner.setOnItemSelectedListener(spinnerSelector);
    serverSpinner.setSelection(defaultServer);
    

    然后,您可以开始更改在单击微调器之前显示的视图的文本大小:

    private AdapterView.OnItemSelectedListener spinnerSelector = new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
            boolean largeTablet = getResources().getBoolean(R.bool.isLargeTablet);
            if (tabletSize) { ((TextView)parent.getChildAt(0)).setTextSize(16); }
            else if (largeTablet) { ((TextView)parent.getChildAt(0)).setTextSize(18); }
            else { ((TextView)parent.getChildAt(0)).setTextSize(12); }
        }
        public void onNothingSelected(AdapterView<?> parent) {
    
        }
    };
    

    您需要做的就是创建特定于布局的文件夹,如下所示:

    values-sw360dp values-sw600dp values-sw800dp

    一个然后在每个文件夹中添加一个名为“bool.xml”的xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <bool name="isTablet">false</bool>
        <bool name="isLargeTablet">false</bool>
    </resources>
    
  • 5

    我已经完成了以下操作 . 我使用了getDropDownView()和getView()方法 .

    使用 getDropDownView() 打开Spinner .

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

    并使用 getView() 表示已关闭的Spinner .

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

    你可以有这种类型的微调器适配器,完全定制:

    ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_text, genderList) {
    
            public View getView(int position, View convertView, ViewGroup parent) {
                View v = super.getView(position, convertView, parent);
                ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
                ((TextView) v).setTextColor(Color.parseColor("#676767"));
                ((TextView) v).setTypeface(vrFont);
                return v;
            }
    
            public View getDropDownView(int position, View convertView, ViewGroup parent) {
                View v = super.getDropDownView(position, convertView, parent);
                ((TextView) v).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
                ((TextView) v).setTypeface(vrFont);
                ((TextView) v).setTextColor(Color.parseColor("#676767"));
    
                if (position == 0) {
                    ((TextView) v).setTextColor(Color.parseColor("#979797"));
                }
    
                return v;
            }
    

    而R.layout.spinner_text是:

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:gravity="center_vertical|left"
    android:ellipsize="marquee"
    android:maxLines="1"
    android:textColor="@color/whiteThree" />
    
  • 12

    要更改微调文本的颜色:

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                ((TextView) parent.getChildAt(0)).setTextColor(Color.WHITE);}
    
  • 1

    可以通过覆盖getView方法更改文本颜色,如下所示:

    new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, list()){
                    @Override
                    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
                        View view = super.getView(position, convertView, parent);
                        //change the color to which ever you want                    
                        ((CheckedTextView) view).setTextColor(Color.RED);
                        return view;
                    }
        }
    
  • 11

    试试这个方法 . 它对我有用 .

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        TextView textView = (TextView) view;
        ((TextView) adapterView.getChildAt(0)).setTextColor(Color.RED);
        ((TextView) adapterView.getChildAt(0)).setTextSize(20);
        Toast.makeText(this, textView.getText()+" Selected", Toast.LENGTH_SHORT).show();
    }
    

相关问题