11

「greenhighlight」というテーマがあります。このテーマはAndroidアクションバースタイルジェネレーターを使用して生成され、デフォルトのActionBarSherlockテーマを継承しています。テーマは、アクションバーの下部にあるハイライトを青から緑に変更する以外は何もしません。

私のすべての活動をテーマにするために、私はただします:

<application android:theme="@style/Theme.greenhighlight"...

これはアクティビティに非常に適しています(アクションバーの下部にある緑色のハイライトに注意してください)。

テーマのAndroidアクティビティ

ただし、自分のアクティビティに合わせてダイアログのテーマを設定するのに問題があります。

デフォルトのテーマAndroidリストダイアログ

デフォルトのテーマAndroidの進行状況ダイアログ

私の「greenhighlight_Dialog」テーマは次のように定義されています。

<style name="greenhighlight_Dialog" parent="@style/Theme.Sherlock.Dialog">
    <item name="android:progressBarStyleHorizontal">
        @style/greenhighlight_ProgressBar
    </item>
</style>

デフォルトのSherlockダイアログテーマを継承し、生成された「greenhighlight」テーマで定義されたプログレスバースタイルを使用してプログレスバーをオーバーライドしています。上のスクリーンショットでは、プログレスバーが正しい緑の色合いであることがわかります。

テーマを使用するために、次のコードを実行しています。

ContextThemeWrapper ctw = 
    new ContextThemeWrapper(this, R.style.greenhighlight_Dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
...
ProgressDialog pd = new ProgressDialog(this, R.style.greenhighlight_Dialog);
...

私の問題は、オーバーライドする必要のある属性がわからないことです。私は、 Styles and Themes docoが推奨するstyles.xmlthemes.xmlを調べてきました(ただし、「R.styleリファレンスは十分に文書化されておらず、スタイルを完全に説明していない」と記されています)。はTheme.Dialogで定義された多くのスタイルであり、必要な変更を取得するためにオーバーライドする必要があるスタイルがわかりません。

ダイアログに緑色のタイトルテキスト、タイトルの下の緑色のハイライトバー、およびチェックリスト項目の緑色のチェックマークを付けるには、どの属性をオーバーライドする必要がありますか?

4

2 に答える 2

23

alert_dialog_holo.xmlソースを掘り下げて、レイアウトファイルに出くわしました。これは分割ビューです。

<View android:id="@+id/titleDivider"
    android:layout_width="match_parent"
    android:layout_height="2dip"
    android:visibility="gone"
    android:background="@android:color/holo_blue_light" />

AlertControllerクラスでは、タイトルが存在する場合に可視性が設定されますVISIBLE。色はハードコーディングされているため、スタイル属性でこれを上書きする方法はありません。

これはタイトル ビューです。

<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
    style="?android:attr/windowTitleStyle"
    android:singleLine="true"
    android:ellipsize="end"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

したがって、を使用しwindowTitleStyleます。たくさんの追跡が必要でしたが、最終的に次のスタイルを見つけました。

<style name="TextAppearance.Holo.DialogWindowTitle">
    <item name="android:textSize">22sp</item>
    <item name="android:textColor">@android:color/holo_blue_light</item>
</style>

親スタイルに戻って、スタイルを介してのみテキストの色を変更できました。

<style name="AppTheme" parent="@android:style/Theme.Holo">
    <item name="android:alertDialogTheme">@style/AlertDialogStyle</item>
</style>

<style name="AlertDialogStyle" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
    <item name="android:windowTitleStyle">@style/DialogWindowTitle</item>
</style>

<style name="DialogWindowTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:textAppearance">@style/DialogWindowTitleAppearance</item>
</style>

<style name="DialogWindowTitleAppearance" parent="@android:style/TextAppearance.Holo.DialogWindowTitle">
    <item name="android:textColor">#00ff00</item>
</style>

仕切りについては、スタイルを介して変更することはできませんが、ID がわかっているため、AlertDialogクラスを拡張して、レイアウトを作成するときにインターセプトし (onCreate)、色を変更することができます。これはプライベートAlertControllerクラスで処理されますが、運がどれだけあるかはわかりません. これをもっと調べて、何か思いついたら戻ってきます。

于 2012-12-07T21:57:19.887 に答える