web-dev-qa-db-ja.com

スピナーのテキストスタイルを変更するにはどうすればよいですか?

レイアウトxmlファイルにスピナーを作成し、このスピナーに文字列配列を設定しています。スピナーのテキストスタイルを変更しても、テキストは変更の影響を受けません。

スピナーにテキストがないため、テキストスタイルを変更できず、スピナーに表示されるテキストビューのスタイルを変更する必要があることをGoogleグループで読みました。しかし、どうすればそれができますか。できれば私のxmlファイルで。

15
Janusz

スピナーをサポートするアダプターを作成するときに、スピナーアイテムのレイアウトを設定できます。

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

Some_text_viewを好きなようにスタイル設定できます。

<TextView Android:id="@+id/some_text_view" Android:textStyle="bold" />
18
Robby Pond

前の人が指定したように、SpinnerコンポーネントがあるメインのXMLレイアウトファイルでは実行できません。

上記の答えは素晴らしいですが、ご存知のようにGoogleのベストプラクティスを使用したい場合は...すべてにスタイルを使用する...次のように3つの「簡単な」ステップで実行できます。

ステップ1:スピナーのアイテムを探すために、レイアウトフォルダーの下に追加のファイルが必要です。

<?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:次に、スピナーにアイテムの配列を入力するときのアクティビティクラスで:

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>

以上です!

これまでのところ、テキストのサイズ、スタイル、色などをすべてstyles.xmlファイルに入れておくと、保守が簡単になります。

24
Oscar S.

XML経由のみ

@Cyril REALの優れた回答のフォローアップとして、Android:entriesを介してスピナーにデータを入力する場合に、XMLを介してスピナーjustのスタイルを設定する方法の完全な実装を以下に示します。

上記の回答は、コードを介してSpinnerを作成している場合は機能しますが、XMLを介して、つまりAndroid:entriesを使用してSpinnerエントリを設定している場合は、次のことができます。次の2つのテーマ設定を使用して、テキストサイズとその他の属性を調整します。

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>
18
Joshua Pinter

実際には、xmlでスピナーのテキストをカスタマイズできます。

独自のスタイルで、:を定義します。

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

このスタイルも定義します:

<style name="yourStyleForSpinnerItem">

//stuff you want for the item style

</style>

Javaコードでスピナーのアダプターをインスタンス化すると、デフォルトのAndroid.R.layout.simple_spinner_itemを使用できます。

9
Cyril REAL

このような回避策が必要ない場合は、簡単な方法があります。スピナーからテキストビューを取得し、そのパラメーターを変更します。

TextView tv = (TextView) spin.getSelectedView();
tv.setTypeface(Typeface.DEFAULT_BOLD); //to make text bold
tv.setTypeface(Typeface.DEFAULT); //to make text normal
2
Vedavyas Bhat

スピナーでポップアップビューの背景を変更するだけの場合は、次のメソッドを呼び出します。

spinner.setPopupBackgroundResource(R.color.pa_md_white);