6

組み込みのリソース ID android.R.layout.simple_spinner_dropdown_item を使用して SpinnerAdapter を作成しています

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);

しかし、そのリソース ID が作成する textView には textColor Black があり、別の色が必要です。色を変更しながら、他のすべてを同じに保つ最良の方法は何ですか?

たとえば、xmlファイルで独自のtextViewレイアウトリソースを作成しようとすると

<?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:textColor="@color/White"
    />

たとえば、パディングが異なるため、android.R.layout.simple_spinner_dropdown_item と同じようには動作しません。そう

  1. Is there a way of creating my own layout resource in an xml file which inherits everything from android.R.layout.simple_spinner_dropdown_item and allows me to override the textColor?
  2. Or is the complete definition of android.R.layout.simple_spinner_dropdown_item available somewhere?
  3. Or perhaps there's an even easier way somehow?

This question relates to another question that I've asked today (Can't change the text color with Android Action Bar drop-down navigation). I've realised that one answer to that question (and hence this question) is to create my own ArrayAdapter class which inherits from ArrayAdapter<T> so that I can always set the color in code whenever the ArrayAdapter gets used (see my answer to that question). But that seems like a very cumbersome solution :-|.

Changing a text color shouldn't be a hard task!

4

3 に答える 3

9

Sam のソリューションを拡張するには、非常に具体的な方法でファイルを変更して、Android のスタイルをオーバーライドする必要があります。

sdk フォルダーから作業中の正しいレイアウト フォルダーにコピーするsimple_spinner_dropdown_item.xmlと、次のコードが表示されます。

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?android:attr/dropdownListPreferredItemHeight"
android:ellipsize="marquee" />

TextView の背景を変更してこのエラーを回避するには:

.../res/layout/simple_spinner_dropdown_item.xml:20: エラー: エラー: 属性が公開されていません。(値が「?android:attr/dropdownListPreferredItemHeight」の「layout_height」)。

コードは次のようになります。

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/spinnerText"
style="@style/SpinnerTextViewItem"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee" />

行う必要があるその他の主な変更は、独自のスタイルを作成することです。おそらく styles.xml ファイルがあるので、次のような新しいスタイルを追加します。

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" >
    <item name="android:textStyle">normal</item>
    <item name="android:background">@color/green</item>
</style>

colors.xml ファイルに何かがあると仮定すると、「@color/green」または選択した色 (もちろん @android:color/... を使用できます) を介して色を設定でき、他のすべての項目は言うまでもありません。追加して TextView を変更できます。

于 2013-07-11T22:11:37.450 に答える
9

android.R.layout.simple_spinner_dropdown_item からすべてを継承し、textColor をオーバーライドできる xml ファイルに独自のレイアウト リソースを作成する方法はありますか?

いいえ。ただし、お気に入りのバージョンのsimple_spinner_dropdown_item.xmlを新しいファイルにカット アンド ペーストしてから、テキストの色を変更するだけです。

または、 android.R.layout.simple_spinner_dropdown_item の完全な定義はどこかで入手できますか?

はい、しかし多くの異なるバージョンがあります。どの API が好きですか? また、既にハード ドライブにコピーがある場合もあります。確認してください<android-sdk>/platforms/android-xx/data/res/layout/(xx特定の API はどこにありますか)。


別の方法として、カスタム アダプターを作成し、各行を膨張させた後にテキストの色を変更することもできますが、上記の方法は実行時の変更を伴わないため、わずかに高速です。

于 2013-04-11T18:11:36.063 に答える
0

カスタムアダプターを使用しないと、色を変更することはできません

 android.R.layout.simple_spinner_dropdown_item

カスタム アダプターを作成すると、色、testSixe、textStyle などを変更できます。

于 2013-04-11T18:36:54.773 に答える