2011-10-14 12 views
7

Theme.Lightに設定されているPreferenceActivityからダイアログを表示しようとしています。ダイアログには、暗い背景に暗いテキストを示していますAndroid:Theme.Lightアクティビティからダイアログを表示すると問題が発生する

enter image description here

私はそれが親アクティビティ、または類似のものからテキストの色を継承しているので、それが暗いテキストを使用しますと仮定します。ダイアログで、暗い背景に白いテキストを使用するか、暗いテキストで白い背景を使用するか、PreferenceActivityがTheme.Lightに設定されているときに行うようにします。

これは既知の問題のようですが、私が見つけた回避策には、Theme.Dialogを拡張し、ダイアログをインスタンス化するために使用するカスタムスタイルを作成して使用することが含まれています。何かのように:

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
<item name="android:textColor">?android:attr/textColorPrimaryInverseDisableOnly</item> 
</style> 

Dialog dialog = new Dialog(context, R.style.CustomDialog); 

私はこれを試しましたが、違いはありませんでした。また、textColorの値をいくつか試しましたが、どれもDialogのテキストの色を変更していませんでした。健全性チェックとして、私が追加:

赤色の背景との対話の結果、スタイル、へ
 <item name="android:background">#FFFF0000</item> 

(私は、私は適切にダイアログをインスタンス化していますことを確信しています)。

私が解決に至った最も近いのは、ダイアログの背景色を白に設定することです。下のダイアログが表示されます。いくつかのバージョンまたは一部のデバイスは、テキストの色を反転するとき、私は見ています同じ動作を使用しない場合がありますので、しかし、これは、良い解決策ではありません。

enter image description here

だから、A上のテキストの色を設定するための良い方法がありますTheme.Lightアクティビティから表示されるダイアログ

+0

私は似たようなもので苦労しているように思います。決してそれを働かせないでください。私の最終的な回避策は、ジンジャーブレッドの色、すなわちres/values-v8で色を定義し、res/valuesで明度を定義する複数の値のリソースを持つことでした。 –

+0

私の誘惑は、リストの背景を白にハードコードし、リストのテキストの色を黒にすることです。これは、デバイスやバージョンに関係なく、白い背景に黒のテキストが表示されることを期待しています。 – ab11

+0

それは確かにうまくいくでしょう。しかし、私はこの痛みのポイントは、デバイスのテーマとブレンドすることだと仮定...ジンジャーブレッドは以前のバージョンよりもずっと暗かったので、特別なケースです。 –

答えて

1

AlertDialog.Builderを使用し、setSingleChoiceItemsのいずれかの方法で自分のListAdapterを使用しないリストを設定するとします。代わりに、間違ったスタイルで独自のスタイルを作成します。これを修正するには、setSingleChoiceItems(ListAdapter adapter, int checkedItem, DialogInterface.OnClickListener listener)を呼び出して、必要なスタイルのレイアウトを使用するアダプタを用意する必要があります。

これがなぜ起こるのでしょうか。実際のアダプタの作成は、次の行が単一選択リストのレイアウトを選択し、ファイルcom.android.internal.app.AlertController、で起こる:あなたが見ることができるように行れ、

<CheckedTextView 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:minHeight="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="@android:color/primary_text_light_disable_only" 
    android:gravity="center_vertical" 
    android:paddingLeft="12dip" 
    android:paddingRight="7dip" 
    android:checkMark="@android:drawable/btn_radio" 
    android:ellipsize="marquee" 
/> 

:ここ

int layout = mIsSingleChoice 
        ? R.layout.select_dialog_singlechoice : R.layout.select_dialog_item; 

は、上述したレイアウトですテーマの参照ではなく、ハードワイヤードの色を含むテキストカラーを設定します。そのため、リストの作成中にこのアイテムが膨らんだ場合、使用するスタイルに関係なく、常に同じ色が使用されます。だから、この問題を克服するための適切な行動は自分のレイアウトとあなた自身のListAdapterを使うことです。

関連する問題