web-dev-qa-db-ja.com

AlertDialogスタイリング-タイトル、メッセージなどのスタイル(色)を変更する方法

私はこれについてかなり頭を痛めています。私がする必要があるのは、Androidアプリケーション-ダイアログの背景は白っぽく、テキストは黒っぽくする必要があります。すべてのAlertDialogsのスタイルを変更することです。スタイル、テーマ、およびコード、マニフェストなどから適用されますが、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>

したがって、これらのどれも機能していません。誰かが私が間違っている可能性があることを教えてもらえますか?

  1. メッセージ(コンテンツテキスト)のテキストの色を変更する
  2. タイトルのテキストの色を変更する
  3. パネルの背景を削除する

注:API 8(2.2)以降をサポートする必要があります。また、私はここで関連する質問のほとんどとグーグルグループを経験しましたが、私は自分の鼻の下にその感覚を持っていますが、理解できません!

編集:スクリーンショットを追加:

AlertDialog not themed as expected

40
Aswin Kumar

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のスタイルを設定する手順を詳しく説明する ブログ投稿 を書きました。

48
David Ferrand

パネルの背景を削除

 <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>
14
Terril Thomas

ダイアログのコンストラクターにスタイルを追加する必要があります

builder = new AlertDialog.Builder(this, R.style.DialogStyle);
8
general03

アラートダイアログボックスをテーマにしたコードは次のとおりです。

<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);

コードの出力

8
Anuj Gupta

この方法でプログラム的に色を変更しました:

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と同じです。

5
StefanoM5

警告ダイアログをどれだけカスタマイズしたいかによって異なります。警告ダイアログをカスタマイズするためのさまざまな手順があります。ご覧ください: https://stackoverflow.com/a/33439849/5475941

enter image description hereenter image description hereenter image description hereenter image description here

2
Vahid

@ 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);
2
Jeshurun

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>
1
msmukesh4