Android - AlertDialog中的图标未显示

9

我有一个警告对话框,但使用 "setIcon" 方法设置的图标未显示。

我使用的是 Android Studio 和 Android Emulator API 19/ Android 4.4.2。

应用程序可以运行,但对话框没有图标,没有错误。

Android Studio 在包含 "setIcon" 的那一行上标记了出来,并提供了 "Introduce local variable" 和 "Make method call chain into call sequence" 选项。

因此,我的问题是:为什么图标没有显示?

我的代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this );  

builder

.setMessage("Repeat game?")
.setIcon(android.R.drawable.ic_dialog_alert)         //<--- icon does not show
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        //Yes button clicked, do something

    }
})
.setNegativeButton("No", null)                      //Do nothing on no
.show();

.setIconAttribute(android.R.attr.alertDialogIcon) - Harsh Patel
6个回答

25
您的标题为空,因此Android不会显示它,这样就不会显示图标。
将其设置为空字符串:
builder.setTitle("")...<all the other stuff>

7
你应该使用类似以下的代码:
builder.setIcon(getResources().getDrawable(android.R.drawable.ic_dialog_alert));

请尝试这个 :)

这个错误提示是“无法解析方法getResources()”。 - Spacewalker
getDrawable()在API 22中已被弃用 - Arpit Patel

3
你只需要添加标题,因为您的图标位置在标题旁边。
.setTitle("Attention")
.setIcon(android.R.drawable.ic_dialog_alert)  

2

也许您还需要设置标题。如果您不喜欢新的布局,可以参考这个问题

AlertDialog.Builder builder = new AlertDialog.Builder(this );  
builder
    .setMessage("Repeat game?")
    .setTitle("")
    .setIcon(android.R.drawable.ic_dialog_alert)         //<--- icon does not show
    .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            //Yes button clicked, do something
        }
    })
    .setNegativeButton("No", null)                      //Do nothing on no
    .show();

0

您可以使用dialogBuiler.setView(your_custom_layout)

例如,自定义对话框布局文件custom_dialog_layout.xml,您可以根据自己的喜好进行美化。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="center"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="7dp"
        android:orientation="horizontal">
        <ImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:id="@+id/custom_diag_img_view"
            android:src="@android:drawable/ic_dialog_alert"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/custom_diag_title_tv"
            style="@style/TextAppearance.AppCompat.Headline"/>
    </LinearLayout>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/custom_diag_msg_tv"
        android:layout_marginTop="15dp"
        style="@style/TextAppearance.AppCompat.Subhead"/>

</LinearLayout>

Utils.java

public static void showAlertDialog(Context activityContext, Integer iconResource, String title, String message){
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activityContext, R.style.Theme_MaterialComponents_DayNight_Dialog_Alert);
    LinearLayout customLL = (LinearLayout) LayoutInflater.from(activityContext).inflate(R.layout.custom_dialog_layout, null);
    ImageView icon = customLL.findViewById(R.id.custom_diag_img_view);
    if(iconResource != null)
        icon.setImageResource(iconResource);
    android.widget.TextView titleTV = customLL.findViewById(R.id.custom_diag_title_tv);
    titleTV.setText(title);
    TextView msgTV= customLL.findViewById(R.id.custom_diag_msg_tv);
    msgTV.setText(message);
    dialogBuilder
            .setView(customLL)
            .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    //some code
                }
            })
            .show();
}

MyActivity.java

    //without title
Utils.showAlertDialog(UploadActivity.this,R.drawable.ic_error, null, getString(R.string.allowed_images));

//with title
Utils.showAlertDialog(UploadActivity.this,R.drawable.ic_error, "Some title, getString(R.string.allowed_images));

您可以添加复选框或其他操作


0

AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);

警告对话框.构建器 alert = 新的 警告对话框.构建器(MainActivity.this);

            alert.setMessage("clicked button");
            alert.setTitle("Your Title"); 
            alert.setIcon(R.drawable.info);  
            alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });

            alert.create().show();

如果你想显示图标,首先必须有一个标题


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