web-dev-qa-db-ja.com

Android 5でデフォルトのダイアログボタンのテキストの色を変更する方法

私のアプリにはたくさんの警告ダイアログがあります。これはデフォルトのレイアウトですが、ダイアログにプラスボタンとマイナスボタンを追加しています。ボタンはAndroid 5のデフォルトのテキスト色(緑色)になります。私は成功せずにそれを変えようとしました。そのテキストの色を変更する方法がありますか。

私のカスタムダイアログ:

public class MyCustomDialog extends AlertDialog.Builder {

    public MyCustomDialog(Context context,String title,String message) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false);

        TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title);
        titleTextView.setText(title);
        TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message);
        messageTextView.setText(message);

        this.setCancelable(false);

        this.setView(viewDialog);

    } }

ダイアログを作成します。

MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            ...
                        }
}).show();

そのnegativeButtonはデフォルトのダイアログボタンで、Android 5 Lollipopのデフォルトの緑色を取ります。

どうもありがとう

Custom dialog with green button

110
FOMDeveloper

最初にAlertDialogオブジェクトを作成し、それを使用してボタンの色を変更して表示するように設定できます。 (show()を呼び出す代わりにbuilderオブジェクトで、AlertDialogオブジェクトを取得するためにcreate()を呼び出すことに注意してください。

//1. create a dialog object 'dialog'
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); 
AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ...
                }

            }).create();

//2. now setup to change color of the button
dialog.setOnShowListener( new OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(COLOR_I_WANT);
    }
});

dialog.show()

あなたがonShow()でそれをしなければならなくて、そしてあなたがあなたの対話を作成した後にそのボタンを単に得ることができない理由はボタンがまだ作成されていなかったということです。

あなたの質問への変更を反映して、私はAlertDialog.BUTTON_POSITIVEAlertDialog.BUTTON_NEGATIVEに変更しました。 「OK」ボタンがネガティブボタンになるのは変ですが。通常は正のボタンです。

147
trungdinhtrong

これはスタイルでそれをするための自然な方法です:

AppThemeTheme.MaterialComponentsから継承されている場合、

<style name="AlertDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="Android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="Android:textColor">#00f</item>
</style>

あなたのAppThemeTheme.AppCompatから継承されるならば:

<style name="AlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="Android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="Android:textColor">#00f</item>
</style>

あなたのAlertDialogThemeをあなたのAppThemeの中で使う

<item name="alertDialogTheme">@style/AlertDialogTheme</item>

またはコンストラクタ内

androidx.appcompat.app.AlertDialog.Builder(context, R.style.AlertDialogTheme)
168

ボタンや他のテキストの色もテーマで変更できます。

values-21/styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="Android:timePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="Android:datePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="Android:alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="AlertDialogCustom" parent="Android:Theme.Material.Light.Dialog.Alert">
  <item name="Android:colorPrimary">#00397F</item>
  <item name="Android:colorAccent">#0AAEEF</item>
</style>

結果:

DialogDate picker

109
peceps

[._____いくつかの__code__

dialog.show(); //Only after .show() was called
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(neededColor);
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(neededColor);
76
Artemiy

ダイアログボタンの色を変更する方法は2つあります。

基本的な方法

アクティビティを変更したいだけなら、alertDialog.show();の後に以下の2行を書きます。

alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary));
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark));

推奨

styles.xmlAlertDialogのテーマを追加することをお勧めします。そうすれば、各アクティビティ/ダイアログの呼び出しで同じコードを何度も書く必要がなくなります。スタイルを作成してダイアログボックスにそのテーマを適用するだけです。そのため、AlertDialogボックスの色を変更したい場合は、styles.xmlの色を変更するだけで、すべてのダイアログボックスがアプリケーション全体で更新されます。

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

そしてAlertDialog.Builderにテーマを適用します

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme);
15
Hassnain Jamil

ボタンのテキストの色(プラス、マイナス、ニュートラル)を変更したい場合は、カスタムダイアログスタイルに追加するだけです。

<item name="colorAccent">@color/accent_color</item>

そのため、ダイアログのスタイルは次のようになります。

<style name="AlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="Android:textColor">@Android:color/black</item>
    <item name="colorAccent">@color/topeka_accent</item>
</style>
8
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="Android:colorPrimary">#00397F</item>
    <item name="Android:textColorPrimary">#22397F</item>
    <item name="Android:colorAccent">#00397F</item>
    <item name="colorPrimaryDark">#22397F</item>
</style>

ボタンや他のテキストの色もappcompatを使って変更することができます。

5
Arade

ちょっとしたメモとして:

ボタンの色(およびスタイル全体)も現在のテーマによって異なりますが、使用するとかなり異なる場合があります。

     Android.app.AlertDialog.Builder builder = new AlertDialog.Builder()

または

    Android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder()

(2番目のものを使用してください)

4
Tobias

私にとってそれは違っていた、私はボタンのテーマを使用しました

<style name="ButtonLight_pink" parent="Android:Widget.Button">
      <item name="Android:background">@drawable/light_pink_btn_default_holo_light</item>
      <item name="Android:minHeight">48dip</item>
      <item name="Android:minWidth">64dip</item>
      <item name="Android:textColor">@color/tab_background_light_pink</item>
    </style>

そしてなぜなら

アンドロイド:textColor

そこは白だった…私はボタンのテキストを見なかった(ダイアログボタンも基本的にボタンである)。そこに行き、変更し、修正しました。

1
cV2