我如何可以设置AlertDialog的正面和负面按钮的顺序?(How can I set the o

2019-07-30 09:46发布

为什么我想要做的,这是另一个讨论完全是,但我需要弄清楚,使我的所有警报对话在其右侧的肯定按钮的最好方式。 请注意,在3.0版和下面的按钮通常显示为确定/取消和4.0及以上是取消/ OK。 我想迫使我的应用程序使用取消/在可能的最简单的方法确定。 我有很多的应用AlertDialogs的。

Answer 1:

不幸的是,我不相信你可以。 然而,引用文档 :

注意:您只能添加每个按钮类型的AlertDialog之一。 也就是说,你不能有一个以上的“正”按钮。 这限制了可能的按钮的数量,以三:正,中性和负。 这些名称在技术上无关的按钮的实际功能,而是应该帮助你跟踪哪些人做什么。

所以,你可以把不同的按钮到任何你想要的。 你现在看到的是具有交换(从点餐,为了这个答案):

  • 上之前ICS设备,按钮顺序(从左到右)阳性 - 中立 - NEGATIVE。
  • 在使用ICS更新的设备,按钮顺序(从左至右)现负 - 中性 - 正。

你可以尝试检查Build.VERSION并用它来决定哪个按钮是在运行时。



Answer 2:

这是我的解决方案。 这是我的工作。

    // Show alertDialog after building
    AlertDialog alertDialog = createAlertDialog(context);
    alertDialog.show();
    // and find positiveButton and negativeButton
    Button positiveButton = (Button) alertDialog.findViewById(android.R.id.button1);
    Button negativeButton = (Button) alertDialog.findViewById(android.R.id.button2);
    // then get their parent ViewGroup
    ViewGroup buttonPanelContainer = (ViewGroup) positiveButton.getParent();
    int positiveButtonIndex = buttonPanelContainer.indexOfChild(positiveButton);
    int negativeButtonIndex = buttonPanelContainer.indexOfChild(negativeButton);
    if (positiveButtonIndex < negativeButtonIndex) {
        // prepare exchange their index in ViewGroup
        buttonPanelContainer.removeView(positiveButton);
        buttonPanelContainer.removeView(negativeButton);
        buttonPanelContainer.addView(negativeButton, positiveButtonIndex);
        buttonPanelContainer.addView(positiveButton, negativeButtonIndex);
    }


Answer 3:

您可以扩展AlertDialog.Builder强制命令:

public class MyDialog extends AlertDialog.Builder {

    public MyDialog(Context arg0) {
        super(arg0);
    }

    @Override
    public Builder setPositiveButton(CharSequence text, OnClickListener listener) {
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return super.setNegativeButton(text, listener);
        } else {
            return super.setPositiveButton(text, listener);
        }

    }

    @Override
    public Builder setNegativeButton(CharSequence text, OnClickListener listener) {
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            return super.setPositiveButton(text, listener);
        } else {
            return super.setNegativeButton(text, listener);
        }
    }

}


Answer 4:

我创建了一个解决方案,以迫使按钮为了使任何设备上的任何Android版本。

这个想法是,我们可以得到对话框的按钮的列表,以便他们在屏幕上,并设置文本和行动出现在我们想要的顺序。 它保证我们会有任何设备上相同的顺序。

请检查我的GitHub库

这里是例如创建和显示对话框:

 new FixedOrderDialogFragment.Builder()
    .setLeftButtonText(R.string.left)
    .setCenterButtonText(R.string.center)
    .setRightButtonText(R.string.right)
    .setDefaultButton(FixedOrderDialogFragment.BUTTON_RIGHT)
    .setMessage(R.string.message)
    .setTitle(R.string.app_name)
    .create()
 .show(getSupportFragmentManager(), "DEMO");

请注意,车主活动应该实现FixedOrderDialogFragment.FixedOrderDialogListener能够在活动的再创造恢复对话状态。



Answer 5:

我想我可以只设置了积极的按钮,取消和负就OK了文本,但事实证明他们是按字母顺序排列。



Answer 6:

有时完全不同的观点是解决一个问题,HI-用户的文化。

  • 在Win32中的确定和取消按钮是绝对必要的或对话将无法正常工作。
  • 在Android中的HI是因为OS“后退”按钮的存在 (onBackPressed(),它也可以被覆盖,ESC上连接的物理键盘)在手术系统HI 有很大的不同

    • 有没有必要为一个负在大多数情况下/取消按钮。
    • 所以大部分对话都足以与肯定按钮
    • 那么有没有按钮顺序问题上 ,肯定按钮是一个人吗?
    • 如果你在编辑字段将其设置为edittext.setSingleLine(); 并输入将焦点移到单肯定按钮。 再次输入其正面按下按钮。
    • 如果用户希望推动取消,他按下OS“后退”按钮 (正如我们不需要解释OS HI策略给用户的核心开发人员,也就是OS发行人的问题。我们只是离开Android的对话框没有取消按钮。)


Answer 7:

  • 在AlertDialog buttonPanel,三个按钮排序[中性] [负] [正]
  • 然后就可以设置类似以下代码按钮

    builder.setNeutralButton( “负”,听者);

    builder.setNegativeButton( “中性”,听者);

    builder.setPositiveButton( “正”,听者);



文章来源: How can I set the order of the positive and negative buttons in AlertDialog?