私はこれについてかなり頭を痛めています。私がする必要があるのは、Androidアプリケーション-ダイアログの背景は白っぽく、テキストは黒っぽくする必要があります。すべてのAlertDialog
sのスタイルを変更することです。スタイル、テーマ、およびコード、マニフェストなどから適用されますが、AlertDialog
内のテキストの色に関しては成功しません。今のところ、次のように設定した最も単純なコードがあります。
マニフェスト:
<application Android:icon="@drawable/ic_launcher" Android:label="@string/app_name" Android:theme="@style/AppTheme" >
styles.xml:
<style name="AppTheme" parent="AppBaseTheme"> <item name="Android:alertDialogStyle">@style/DialogStyle</item> </style> <style name="DialogStyle" parent="@Android:style/Theme.Dialog"> <!-- changing these background stuff works fine --> <item name="Android:bottomBright">@Android:color/white</item> <item name="Android:bottomDark">@Android:color/white</item> <item name="Android:bottomMedium">@drawable/dialog_footer_bg</item> <item name="Android:centerBright">@Android:color/white</item> <item name="Android:centerDark">@drawable/dialog_body_bg</item> <item name="Android:centerMedium">@Android:color/white</item> <item name="Android:fullBright">@color/orange</item> <item name="Android:fullDark">@color/orange</item> <item name="Android:topBright">@color/green</item> <item name="Android:topDark">@drawable/dialog_header_bg</item>
以下にリストされた項目は機能しません(各要素の上に付けたコメントを読んでください):
<!-- panelBackground is not getting set to null, there is something squarish around it --> <item name="Android:panelBackground">@null</item> <!-- Setting this textColor doesn't seem to have any effect at all. Messages, title, button text color, whatever; nothing changes. --> <item name="Android:textColor">#000000</item> <!-- Also tried with textAppearance, as follows. Didn't work --> <item name="Android:textAppearance">?android:attr/textColorPrimaryInverse</item> <!-- Also tried changing textAppearancePrimary, to no avail --> <item name="Android:textColorPrimary">#000000</item> <!-- Also need to change the dialog title text, tried it as follows, dint work: --> <item name="Android:windowTitleStyle">@style/DialogWindowTitle</item> </style>
DialogWindowTitleは次のように定義されます。
<style name="DialogWindowTitle"> <item name="Android:textAppearance">?android:attr/textAppearanceMediumInverse</item> </style>
したがって、これらのどれも機能していません。誰かが私が間違っている可能性があることを教えてもらえますか?
注:API 8(2.2)以降をサポートする必要があります。また、私はここで関連する質問のほとんどとグーグルグループを経験しましたが、私は自分の鼻の下にその感覚を持っていますが、理解できません!
編集:スクリーンショットを追加:
AlertDialogのテーマを定義し、アクティビティのテーマで参照する必要があります。属性はalertDialogTheme
ではなくalertDialogStyle
です。このような:
<style name="Theme.YourTheme" parent="@Android:style/Theme.Holo">
...
<item name="Android:alertDialogTheme">@style/YourAlertDialogTheme</item>
</style>
<style name="YourAlertDialogTheme">
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</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">...</item>
<item name="Android:textAppearanceMedium">...</item>
<item name="Android:borderlessButtonStyle">...</item>
<item name="Android:buttonBarStyle">...</item>
</style>
タイトル、メッセージの色とテキストの外観を変更でき、各領域の背景をある程度制御できます。 AlertDialogのスタイルを設定する手順を詳しく説明する ブログ投稿 を書きました。
パネルの背景を削除
<item name="Android:windowBackground">@color/transparent_color</item>
<color name="transparent_color">#00000000</color>
これが私のスタイルです:
<style name="ThemeDialogCustom">
<item name="Android:windowFrame">@null</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
<item name="Android:windowBackground">@color/transparent_color</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:colorBackgroundCacheHint">@null</item>
</style>
コンストラクタに追加したもの。
textColorを追加:
<item name="Android:textColor">#ff0000</item>
ダイアログのコンストラクターにスタイルを追加する必要があります
builder = new AlertDialog.Builder(this, R.style.DialogStyle);
アラートダイアログボックスをテーマにしたコードは次のとおりです。
<style name="alertDialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="Android:background">@color/light_button_text_color</item>
<item name="Android:textColor">@Android:color/black</item>
<item name="Android:textColorPrimary">@Android:color/black</item>
<item name="Android:textColorSecondary">@Android:color/black</item>
<item name="Android:titleTextColor" tools:targetApi="m">@Android:color/black</item>
</style>
このコードをstyles.xmlに配置します。 Javaでこのテーマを次のように適用します:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.alertDialog);
この方法でプログラム的に色を変更しました:
var builder = new AlertDialog.Builder (this);
...
...
...
var dialog = builder.Show ();
int textColorId = Resources.GetIdentifier ("alertTitle", "id", "Android");
TextView textColor = dialog.FindViewById<TextView> (textColorId);
textColor?.SetTextColor (Color.DarkRed);
alertTitleとして、この方法で他のデータを変更できます(次の例はtitleDividerの場合)。
int titleDividerId = Resources.GetIdentifier ("titleDivider", "id", "Android");
View titleDivider = dialog.FindViewById (titleDividerId);
titleDivider?.SetBackgroundColor (Color.Red);
これはC#ですが、Javaと同じです。
警告ダイアログをどれだけカスタマイズしたいかによって異なります。警告ダイアログをカスタマイズするためのさまざまな手順があります。ご覧ください: https://stackoverflow.com/a/33439849/5475941
@ general03の答えに基づいて、Androidの組み込みスタイルを使用してダイアログをすばやくカスタマイズできます。ダイアログのテーマはAndroid.R.style.Theme_DeviceDefault_Dialogxxx
にあります。
例えば:
builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_Dialog_MinWidth);
builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_Dialog_NoActionBar);
builder = new AlertDialog.Builder(this, Android.R.style.Theme_DeviceDefault_DialogWhenLarge);
values-v21/style.xmlのスタイルでこれを使用します
<style name="AlertDialogCustom" parent="@Android:style/Theme.Material.Dialog.NoActionBar">
<item name="Android:windowBackground">@Android:color/white</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:colorAccent">@color/cbt_ui_primary_dark</item>
<item name="Android:windowTitleStyle">@style/DialogWindowTitle.Sphinx</item>
<item name="Android:textColorPrimary">@color/cbt_hints_color</item>
<item name="Android:backgroundDimEnabled">true</item>
<item name="Android:windowMinWidthMajor">@Android:dimen/dialog_min_width_major</item>
<item name="Android:windowMinWidthMinor">@Android:dimen/dialog_min_width_minor</item>
</style>
また、Lollipop以前のデバイスの場合はvalues/style.xml
<style name="AlertDialogCustom" parent="@Android:style/Theme.Material.Dialog.NoActionBar">
<item name="Android:windowBackground">@Android:color/white</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:colorAccent">@color/cbt_ui_primary_dark</item>
<item name="Android:windowTitleStyle">@style/DialogWindowTitle.Sphinx</item>
<item name="Android:textColorPrimary">@color/cbt_hints_color</item>
<item name="Android:backgroundDimEnabled">true</item>
<item name="Android:windowMinWidthMajor">@Android:dimen/dialog_min_width_major</item>
<item name="Android:windowMinWidthMinor">@Android:dimen/dialog_min_width_minor</item>
</style>
<style name="DialogWindowTitle.Sphinx" parent="@style/DialogWindowTitle_Holo">
<item name="Android:textAppearance">@style/TextAppearance.Sphinx.DialogWindowTitle</item>
</style>
<style name="TextAppearance.Sphinx.DialogWindowTitle" parent="@Android:style/TextAppearance.Holo.DialogWindowTitle">
<item name="Android:textColor">@color/dark</item>
<!--<item name="Android:fontFamily">sans-serif-condensed</item>-->
<item name="Android:textStyle">bold</item>
</style>