8

Holo テーマ ダイアログにスピナーがあり、テキストの色を変更しようとしています。読みにくいためです。

ダイアログ スピナーのテキストの色

私はandroid styles.xmlと他の多くの回答を見て、カスタムスタイルを正しく設定していると信じています。しかし、それは取り上げられていません。

これは、スピナーが存在するダイアログ レイアウト ファイルからの抜粋です。

<Spinner
        android:id="@+id/spn_Type"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:entries="@array/dose_type_options"
        style="@style/DialogSpinner" />

これらは、values-v14 フォルダー内の styles.xml の関連するエントリです。

<style name="DialogSpinner" parent="@android:style/Widget.Holo.Spinner">
        <item name="android:spinnerItemStyle">@style/MySpinnerItem</item>
</style>

<style name="MySpinnerItem" parent="android:Widget.Holo.TextView.SpinnerItem">
    <item name="android:textAppearance">@style/MyTextAppearanceSpinnerItem</item>
</style>

<style name="MyTextAppearanceSpinnerItem" parent="android:TextAppearance.Holo.Widget.TextView.SpinnerItem">
    <item name="android:textColor">#FFF</item>
</style>

ダイアログ自体は、以下を使用して Holo ダーク テーマに強制されます。

<style name="FibroDialog" parent="@android:style/Theme.Holo.Dialog">

</style>

スピナーのテキストが白くない理由を誰か特定できますか?

コードで色を変更することを提案する他のソリューションを見てきましたが、このアプリは 2.3 をサポートしています。

ありがとう

以下のWodaからの回答を使用して更新

スピナーの初期値のテキストの色が白になりました。これは、ユーザーにスピナーがあることを強調するのに大いに役立ちます。

ダイアログ スピナーのテキストの色 2

ただし、選択可能なアイテムのテキストの色はまだ黒です。大したことじゃないだろうけど、少なくともスピナーの存在は最初のテキストを白に変更して確認した。しかし、アイテムがまだ黒い理由と、それらを白に変更する方法を知りたいです。

4

3 に答える 3

5

SpinnerItemStyle をテーマに受け入れようとしましたか? したがって、アプリ内のすべてのスピナーは同じスタイルになります。私はこのように使用していますが、うまくいきます:

テーマ.xml:

<style name="exampleTheme" parent="android:Theme.Holo.Light">
    <item name="android:spinnerItemStyle">@style/SpinnerItem_example</item>
    ...
</style>

スタイル.xml:

<style name="SpinnerItem_example" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
        <item name="android:textColor">#000000</item>
</style>

更新: styles.xml を詳しく調べてみると、次のようになりました。

<style name="Widget.DropDownItem.Spinner">
        <item name="android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
</style>

<style name="Widget.DropDownItem">
        <item name="android:textAppearance">@style/TextAppearance.Widget.DropDownItem</item>
        <item name="android:paddingStart">@dimen/dropdownitem_text_padding_left</item>
        <item name="android:paddingEnd">@dimen/dropdownitem_text_padding_right</item>
        <item name="android:gravity">center_vertical</item>
</style>

したがって、おそらく Widget.DropDownItem をカスタマイズして、テーマで受け入れる必要があります。

...
<item name="dropDownItemStyle">@android:style/Widget.DropDownItem</item>
...

アプリケーションをカスタマイズするために、次の 2 つのリンクは、さまざまなビューの構造を理解するのに大いに役立ちました。これら 2 つのファイルは、Android ソース コードの一部です。あなたにも役立つかもしれません。

于 2013-05-19T20:00:38.060 に答える
4

電話したら直りました

mArrayAdapter.setDropDownViewTheme(mActivity.getTheme());

これが誰かを助けることを願っています;)

于 2017-05-05T16:33:37.637 に答える
0

スタイルを変更せずに、コードで内部 TextView にアクセスできます。これは、スピナーの有効化と無効化をどのように処理したかです

.getSelectedView() は機能しませんでした。そこで、Spinner をだまして、無効になっていることを「表示」させました。

「無効」な外観のために独自の色を定義する必要があります。

例えば:

R.color.blue_text //means enabled
R.color.gray_text //means disabled

だから私のスピナーを無効にするには:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text));
mySpinner.setEnabled(false);
mySpinner.setFocusable(false);

スピナーを有効にするには:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text));
mySpinner.setEnabled(true);
mySpinner.setFocusable(true);

getChildAt(0) 関数を使用すると、スピナーの最初のアイテムにアクセスできます。これは、TextView として画面に表示されるものです。

スタイルを変更したり、XML を変更したりする必要はありません。イベントメソッド内であっても、コードでこれを行うだけで問題ありません。

于 2015-06-04T14:21:54.980 に答える