如何在Android中为对话框设置图标

10

我想要自定义Android中的对话框。 我知道如何为对话框设置标题:

dialog.setTitle("O message");

现在我想把图标放在标题前面。我该怎么做呢?

Dialog dialog;
dialog = new Dialog(this);
dialog.setContentView(R.layout.layouterror22);      
dialog.setTitle("O message");
7个回答

28

您可以使用以下代码添加图标:

Dialog dialog = new Dialog(context);

dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.your_icon); 
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Dialog Title");

dialog.show();

请查看“在自定义对话框中使用图标(Android)”


3
行的顺序非常重要,因为在将任何内容推送到对话框之前必须先请求特征。 - msysmilu
2
代码行的顺序非常重要!!!dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.your_icon); 应该在 setContentView 之后调用。 - Carl Bosch

10

2
这是对话框,不是警告对话框。 - D T
@user1497597:请参考此链接,它有一个示例,您可以根据自己的需要进行更改 http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application - Aerrow

5
dialog.setIcon(Drawable icon);

或者

dialog.setIcon(int resId);

希望这可以帮到您。

我使用了 dialog.setIcon,但不支持(注意:此对话框是自定义的)。这是我的代码:Dialog dialog; dialog = new Dialog(this); dialog.setContentView(R.layout.layouterror22); dialog.setTitle("O message"); - D T
问题是关于对话框(Dialog),而不是警告对话框(AlertDialog)。上面的答案不适用于对话框(Dialog)。请参见上面的Carl Bosch评论。 - user1608385

3
也许你应该使用AlertDialog。如果你这样做了,只需
AlertDialog.Builder b = new AlertDialog.Builder(yourContext);
b.setIcon(yourIcon);
/* add other properties thanks to b.set... */
b.create().show();

希望这对您有帮助。

我使用了dialog.setIcon,但不支持(注意:此对话框是自定义的)。这是我的代码:Dialog dialog; dialog = new Dialog(this); dialog.setContentView(R.layout.layouterror22); dialog.setTitle("O message"); - D T
2
似乎需要对 AlertDialog 应用 setTitle() 才能使 setIcon() 生效。 - user1531971
@jdv 真是太棒了。我刚刚编写了我的 setIcon(android.R.drawable.ic_dialog_alert) 代码,不知道为什么它不起作用,然后我看到屏幕的另一侧有你的评论,解释了原因。 - Don Hatch

0
AlertDialog.Builder builder = new AlertDialog.Builder(this)
builder.setTitle("Alert");
***builder.setIcon(R.drawable.ic_baseline_call_24)***
builder.setPositiveButton("Visit", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    AlertDialog dialog = builder.create();
    dialog.show();

0
要将图标添加到您的警报对话框中,您需要向其中添加以下代码。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
      /*  builder.setMessage("Visit Be Developers.tech");
        builder.setTitle("Alert");
    builder.setIcon(R.drawable.ic_baseline_call_24);//This line should be added

        builder.setPositiveButton("Visit", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();

如需进行更多自定义,例如添加列表、选项等,请查看https://bedevelopers.tech/alert-dialog-in-android-show-alert-using-the-builder/


0
如果您正在使用带有片段的 viewPager,则可以在 MainActivityonBackPressed() 中调用 safeExit()。 这就是我所做的,我从未遇到任何问题。
    @Override
    public void onBackPressed() {

        try {
            if (getFragmentManager().getBackStackEntryCount() > 1) {
                FragmentManager.BackStackEntry first = getFragmentManager().getBackStackEntryAt(0);
                getFragmentManager().popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
            } else
                safeExit();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private void safeExit() {
        new Builder(this).setIcon(R.drawable.ic_launcher).setTitle("Exit!").setMessage(
                "Close Application?").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                MainActivity.this.finish();
            }
        }).setNegativeButton("No", null).show();
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接