18

我正在我的布局 xml 文件中创建一个微调器,并为这个微调器设置一个字符串数组。如果我更改微调器的文本样式,则文本不受更改的影响。

我在 googlegroups 中读到微调器没有文本,因此无法更改文本样式,我必须更改微调器中显示的文本视图的样式。但我该怎么做。最好在我的 xml 文件中。

4

6 回答 6

29

正如我的前任所指出的,您不能在 Spinner 组件所在的主要 XML 布局文件上执行此操作。

上面的答案很好,但如果我们想使用谷歌的最佳实践,就像你知道的那样......对所有东西都使用样式......你可以通过 3 个“简单”的步骤来完成,如下所示:

第 1 步:您需要在布局文件夹下有一个额外的文件,其中包含 Spinner 的项目:

<?xml version="1.0" encoding="utf-8"?>
<TextView  
    android:id="@+id/textViewSpinnerItem" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@style/SpinnerTextViewItem"
    xmlns:android="http://schemas.android.com/apk/res/android" />

将此文件命名为:spinner_item_text.xml

第 2 步:然后,在您的 Activity 类上,当您使用一组项目填充 Spinner 时:

adapter = new ArrayAdapter<CharSequence>(this, R.layout.spinner_item_text, items);
spinner.setAdapter(adapter);

请注意,R.layout.spinner_item_text资源位于您自己的 R 文件中。

第 3 步:在您的 values 文件夹下,创建或使用(您可能已经有一个)文件 styles.xml。所需的样式条目应如下所示:

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" >
    <item name="android:textSize" >8dp</item>
    <item name="android:textStyle" >bold</item>
</style>

就是这样!

到目前为止,将所有关于文本大小、样式、颜色等的信息都放在 style.xml 文件中非常方便,因此易于维护。

于 2011-10-19T01:56:02.883 回答
24

仅通过 XML

作为@Cyril REAL 出色答案的后续行动,如果通过android:entries.

如果您通过代码创建Spinner ,则上述答案有效,但如果您通过 XML 设置 Spinner 条目,即使用android:entries,那么您可以使用以下两个主题设置调整文本大小和其他属性:

在你的 res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="android:Theme.Holo">
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">

        <!-- For the resting Spinner style -->
        <item name="android:spinnerItemStyle">
            @style/spinnerItemStyle
        </item> 

        <!-- For each individual Spinner list item once clicked on -->
        <item name="android:spinnerDropDownItemStyle">
            @style/spinnerDropDownItemStyle
        </item>

    </style>

    <style name="spinnerItemStyle">
        <item name="android:padding">10dp</item>
        <item name="android:textSize">20sp</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="spinnerDropDownItemStyle">
        <item name="android:padding">20dp</item>
        <item name="android:textSize">30sp</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

</resources>
于 2014-01-16T22:37:04.017 回答
19

当您创建支持 Spinner 的适配器时,您可以为微调器项目设置布局。

spinner.setAdapter(new ArrayAdapter(this, R.id.some_text_view));

您可以按照自己的方式设置 some_text_view 的样式。

<TextView android:id="@+id/some_text_view" android:textStyle="bold" />
于 2010-07-08T15:47:32.470 回答
9

其实你可以通过 xml 自定义微调器的文本。

以您自己的风格,定义一个:

<item name="android:spinnerItemStyle">@style/yourStyleForSpinnerItem</item>

并定义这种风格:

<style name="yourStyleForSpinnerItem">

  // Stuff you want for the item style.

</style>

在java代码中实例化spinner的适配器时,可以使用默认的android.R.layout.simple_spinner_item

于 2012-01-15T16:55:55.080 回答
1

如果您不想要这样的解决方法,有一个简单的方法。从微调器获取文本视图并更改其参数:

TextView tv = (TextView) spin.getSelectedView();
tv.setTypeface(Typeface.DEFAULT_BOLD); //to make text bold
tv.setTypeface(Typeface.DEFAULT); //to make text normal
于 2014-02-20T20:10:55.863 回答
0

如果您只想更改微调器中弹出视图的背景,请调用此方法:

spinner.setPopupBackgroundResource(R.color.pa_md_white);
于 2018-01-23T08:14:26.450 回答