web-dev-qa-db-ja.com

Android:カスタムレイアウトを使用せずにAlertDialogのタイトルテキストの色と背景色を変更するにはどうすればよいですか?

カスタムレイアウトを使用せずにAlertDialogtitle colorbackground colorを変更したい。私の要件、

I want like this

以下のコードを試しましたが、機能しません。

final CharSequence[] items = {" Visiting Card", "Prescription Letter"};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setMessage(message)
            .setTitle(title).setCancelable(false);

    builder.setItems(items, (dialog, item) -> {
    });

    AlertDialog dialog = builder.create();
            dialog.show();
    int textViewId = dialog.getContext().getResources().getIdentifier("Android:id/alertTitle", null, null);
    TextView tv = dialog.findViewById(textViewId); // It always returns null
    if (tv != null) {
        tv.setTextColor(activity.getResources().getColor(R.color.white));
        tv.setBackgroundColor(activity.getResources().getColor(R.color.colorPrimary));
}

以下の行を使用して試しましたが、常にnullfindViewByIdに返されます。

int textViewId = dialog.getContext().getResources().getIdentifier("Android:id/alertTitle", null, null);
TextView tv = dialog.findViewById(textViewId);

私もstyleを使用してみましたが、タイトルのテキストの色のみが変更され、

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:background">#ffffff</item>
    <item name="Android:textColor">@color/white</item>
    <item name="Android:headerBackground">@color/colorPrimary</item>
</style>
5
Sagar Zala

警告ダイアログにカスタムタイトルを使用できます。

TextView textView = new TextView(context);
textView.setText("Select an option");
textView.setPadding(20, 30, 20, 30);
textView.setTextSize(20F);
textView.setBackgroundColor(Color.CYAN);
textView.setTextColor(Color.WHITE);

final CharSequence[] items = {"Visiting Card", "Prescription Letter"};
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setCustomTitle(textView);
builder.setItems(items, (dialog, item) -> {
    }).show();

Custom Alert Dialog Header

2

色を設定する前にdialog.show();を呼び出すIMOなので、以下のコードを試してください

AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        builder.setMessage(message)
        .setTitle(title).setCancelable(false);
AlertDialog dialog = builder.create();

int textViewId = dialog.getContext().getResources().getIdentifier("Android:id/alertTitle", null, null);
TextView tv = dialog.findViewById(textViewId); // It always returns null
if (tv != null) {
    tv.setTextColor(activity.getResources().getColor(R.color.white));
    tv.setBackgroundColor(activity.getResources().getColor(R.color.colorPrimary));

    }
  dialog.show(); //change here 

更新

タイトルの下の行に警告するように設定してみてください

alert.setTitle( Html.fromHtml("<font color='#FF7F27'>Hello World</font>"));
1
Omi

あなたはこれを望まないことを知っていますが、ビューを使用することがこれを行う最良の方法です。カスタムビューを使用すると、すべての色を非常に簡単に変更できます。

  1. レイアウトを作成し、そこにアイテムを配置するだけです(色を変更します)。

  2. LayoutInflaterを作成します。_LayoutInflater layoutinflater = getLayoutInflater;_

  3. 次のようにビューを設定します:View view1 = layoutinflater.inflate(R.layout.yourlayout, null);

  4. _view1_をビルダーに設定します:builder.setView(view1);

AlertDialogでアイテムを使用する場合は、view1!で変数を宣言します。

例:Textview tx = (TextView)view1.findViewById(R.id.textview)

1
Jakob

テーマを設定できます:

new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);

または、以下のようにsetOnShowListener()を追加できます。

final CharSequence[] items = {" Visiting Card", "Prescription Letter"};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setMessage(message)
            .setTitle(title).setCancelable(false);

builder.setItems(items, (dialog, item) -> {
});

AlertDialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(DialogInterface arg0) {
                    int titleId = getResources().getIdentifier("alertTitle", "id", "Android");
                    TextView dialogTitle = (TextView) dialog.findViewById(titleId);
                    dialogTitle.setTextColor(Color.WHITE);
                    dialogTitle.setBackgroundColor(Color.BLACK);
                }
 });
 dialog.show();
0
Grygorii

警告ダイアログですべてを変更できます。

// Title
TextView titleView = new TextView(context);
titleView.setText("Title");
titleView.setGravity(Gravity.CENTER);
titleView.setPadding(20, 20, 20, 20);
titleView.setTextSize(20F);
titleView.setTypeface(Typeface.DEFAULT_BOLD);
titleView.setBackgroundColor(ContextCompat.getColor(context, R.color.colorPrimary));
titleView.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));

AlertDialog ad = new AlertDialog.Builder(context).create();

ad.setCustomTitle(titleView);

ad.setCancelable(false);

ad.setMessage("Message");

ad.setButton(Dialog.BUTTON_POSITIVE,"OK",new DialogInterface.OnClickListener(){
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // your code
    }
});

ad.show();

// Message
TextView messageView = ad.findViewById(Android.R.id.message);

if (messageView != null) {
    messageView.setGravity(Gravity.CENTER);
}

// Buttons
Button buttonOK = ad.getButton(DialogInterface.BUTTON_POSITIVE);
buttonOK.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));
0
user8959091

サンプル画像を確認

カスタムテーマを使用して、アラートダイアログのタイトル、背景、ボタンの色を変更できます。

   <style name="CustomDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> 
        <item name="Android:windowBackground">@Android:color/black</item>
        <item name="colorAccent">@Android:color/white</item>
        <item name="Android:textColorPrimary">@Android:color/white</item>
    </style>

Android:背景色を変更するwindowBackground

colorAccentはボタンの色を変更します

Android:textColorPrimaryでダイアログのタイトルの色を変更します

このテーマをダイアログに適用する

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.CustomDialogTheme);
0
AndroChunk

それが私にとってうまくいったことです。とてもシンプルです。何らかの理由で私のダイアログにタイトルの背景がダイアログの背景とは異なって表示されたため、このコードを追加した後、問題は解決しました。

ダイアログが表示されたら、setBackgroundDrawableに色を設定します。

mDialog.show();

mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(put here your color));
0
batsheva