三星Galaxy s4上的AlertDialog未显示积极和消极按钮

5

我已经显示了一个带有2个按钮的AlertDialog,即Yes和Cancel,以下是代码。

final AlertDialog.Builder builder = new AlertDialog.Builder(RiderDetailActivity.this);
builder.setCancelable(false);
builder.setMessage("Are you sure?");

final AlertDialog dialog = builder.create();
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
dialog.show();

这在三星 Galaxy S4 上仅显示“是”和“取消”按钮。

enter image description here

但当我使用 dialog.setButton 时,它可以完美地工作。

dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        dialog.dismiss();
    }
});

enter image description here

注意: builder.setPositiveButtonbuilder.setNegativeButton在三星Galaxy S4上出现问题,而其他设备则可以正常工作。

更新

我需要在设置按钮后创建对话框,但我的问题是为什么其他设备可以工作,而三星Galaxy S4却出现问题?


dialog.show(); 上面添加以下代码:final AlertDialog dialog = builder.create(); 然后查看结果。 - Manohar
@Redman 是的,那个方法可以用,但是为什么之前其他设备和模拟器上也能用呢?如果这是我的错误,那么在其他设备上也不应该能用才对。 - Ravi
这是预期的行为,因为您在构建对话框后添加按钮到生成器。将final AlertDialog dialog = builder.create();移动到添加按钮之后。 - Vladyslav Matviienko
@VladMatvienko 是的,我明白了,但在这种情况下,它也不应该与其他设备和模拟器一起工作。 - Ravi
可能无法正常工作。有很多未记录的功能。 - Vladyslav Matviienko
可能是Dialog do not show positive and negative button的重复问题。 - Vega
6个回答

5
尝试以下这个办法。我希望这对你有用。
 final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setCancelable(false);
    builder.setMessage("Are you sure?");
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();

1
是的,那个可以运行,但为什么之前它能在其他设备和模拟器上运行呢? - Ravi
有时三星操作系统会与安卓系统出现一些问题。请投票支持答案。 - SANJAY GUPTA
3
谢谢您的夸奖。"Samsung OS"是三星公司自己开发的操作系统,与安卓不同。 - Manohar
我知道三星也基于Android操作系统。但是我听说过一些谣言,说三星在安装Android时也进行了一些修改。因为有时候我在其他设备上运行代码很好,但在三星设备上却出现问题。 - SANJAY GUPTA

5
在您的 alertDialog.show() 方法之后添加这两行代码。
alertDialog.getButton(alertDialog.BUTTON_NEGATIVE).setTextColor(ContextCompat.getColor(_context, R.color.red));
alertDialog.getButton(alertDialog.BUTTON_POSITIVE).setTextColor(ContextCompat.getColor(_context, R.color.red));

这是否意味着之前有一个按钮,但文字颜色是透明的? - Ravi
2
我不是100%确定,但在某些设备中它没有显示出来。 - Piyush

2

在添加按钮之前,您正在创建对话框。

只需将

final AlertDialog dialog = builder.create();

设置好按钮后

是的,那个可以运行,但为什么之前它能在其他设备和模拟器上运行呢? - Ravi
@RaviRupareliya,正如您所知道的那样,三星定制了 Android 的原始版本,在太多方面进行了修改,这就是为什么三星会出现问题的原因。小米红米也和三星一样,如果您使用该设备进行测试,可能也会遇到这些问题。 - Harsh Dalwadi

0
例如我,当将消息设置为空字符串("")时,我的按钮没有显示在AlertDialog上。

0

在调用Builder.create()之前,我遇到了这个错误,它出现在正负按钮之前。所以我做了这个:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_custom_statistic, null);
builder.setView(view);
builder.setCancelable(false);

// Initialize view
...

builder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialogInterface, int i) {
        // Do something
        builder.create().dismiss();
    }
});
builder.setNegativeButton("Cancel", null);

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

// This for edit color and caps text
TextView ok = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
TextView no = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
ok.setTextColor(getResources().getColor(R.color.purple_200));
ok.setAllCaps(false);
no.setTextColor(getResources().getColor(R.color.purple_200));
no.setAllCaps(false);

0

你可以尝试使用这段代码...

 new AlertDialog.Builder(this)
                .setTitle("Add new Title")
                .setMessage("Type Message here")
                .setPositiveButton("Add", (dialog, whichButton) -> {
                   // Onclick event Here
                })
                .setNegativeButton("Close",(dialog, i) -> {

                })
                .show();

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