如何避免AlertDialog正面按钮变得不可见?

时间:2016-01-12 08:54:43

标签: android alertdialog

我的应用程序使用Android API 21(android 5)与Theme.Material.Light.DarkActionBar主题。 在AlertDialog中,我添加了正,负和中性按钮。在小屏幕上,如果(翻译的!)按钮文本太长而无法放在(肖像)屏幕上,这可能会导致正面被隐藏。以前版本的android没有这个问题(文本被包装,使按钮适合)。如果中性按钮被隐藏,该应用程序将正常工作,但我需要正面按钮始终可见,无论翻译如何。有没有办法强制执行此操作,除了添加" normal"布局中的按钮? Alt:是否可以检查按钮是否合适?所以我可以在运行时决定不使用中性按钮吗?

2 个答案:

答案 0 :(得分:1)

我找到了一个或多或少有效的解决方案。在onResume()方法中,我修改了中性按钮,如下所示:

public void onResume() {
    super.onResume();
    final Button btn = ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_NEUTRAL);
    if (btn != null) {
        if (Build.VERSION.SDK_INT >= 21) {
            DisplayMetrics metrics = getResources().getDisplayMetrics();
            int maxWidth = (metrics.widthPixels / 3);
            btn.setSingleLine(false);
            btn.setMaxWidth(maxWidth);
            btn.setMaxLines(2);
            btn.setEllipsize(TextUtils.TruncateAt.END);
            // something in the above code reverts the allCaps
            btn.setAllCaps(true);
        }
}

设置maxWidth有效,但我还没有找到一种方法来准确计算会导致正按钮消失的实际最大宽度。上面的代码无条件地限制了显示宽度的三分之一,这似乎在我的情况下正常。

答案 1 :(得分:0)

通过创建自定义视图(具有自定义视图的对话框)可以在所有地方解决问题,该视图将按钮作为底部。将onclick监听器设置为all并单独处理。