如何确定AlertDialog按钮的最大文本长度?

时间:2011-11-13 17:32:08

标签: android dialog font-size android-alertdialog

我遇到了一个非常非常简单AlertDialog的问题,它创建了我的“关于”对话框,有三个选项。看看它在仿真器,我的HTC Sensation和Galaxy S2上的样子:

AlertDialog on three different devices

该对话框由此(伪)代码创建:

builder.setPositiveButton("OK", null);
builder.setNeutralButton("Disclaimer", [...]);
builder.setNegativeButton("Jetzt zum Market", [...]);

这很简单,我从未想过不同设备上的最大文本长度差别如此之大!另外:我认为三星撕毁“免责声明”是如此混乱,而不是谈论“市场”这个词的缺失。

如果这已成为一个问题,我该如何创建一个简单的AlertDialog? 有线索吗?想象一下设置如此大的字体甚至“取消”不再适合的设备! 叹息我该如何预防?

感谢您的建议!!

2 个答案:

答案 0 :(得分:1)

Drew DeNardo的答案几乎是正确的。

myDialog.getButton(BUTTON_POSITIVE)返回null,因为它尚未创建。

您需要覆盖onShow:

final AlertDialog alert= builder.create();

alert.setOnShowListener(new DialogInterface.OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {

        float textSize = 15.0f;

        Button positive = alert.getButton(AlertDialog.BUTTON_POSITIVE);
        positive.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);

        Button neutral = alert.getButton(AlertDialog.BUTTON_NEUTRAL);
        neutral.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);

        Button negative = alert.getButton(AlertDialog.BUTTON_NEGATIVE);
        negative.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
    }
});

答案 1 :(得分:0)

以“DP”为单位指定字体大小(与密度无关的像素)。这将指示每部手机缩放字体,使其在所有设备上看起来(或多或少)相同。

http://developer.android.com/guide/practices/screens_support.html

我不确定为什么这个答案被低估了,我只能假设你不知道怎么做我建议的。让我提供更多细节。

builder.setPositiveButton("OK", null);
builder.setNeutralButton("Disclaimer", [...]);
builder.setNegativeButton("Jetzt zum Market", [...]);

AlertDialog myDialog = builder.create();

/* You'll have to play with this value to see what looks right */
float textSize = 15.0f;

Button positive = myDialog.getButton(BUTTON_POSITIVE);
positive.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);

Button neutral = myDialog.getButton(BUTTON_NEUTRAL);
neutral.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);

Button negative = myDialog.getButton(BUTTON_NEGATIVE);
negative.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);

myDialog.show();

这将使按钮的字体大小与对话框的标题和正文不同。您可以使用此处的方法替换AlertDialog的内容视图:

http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog

在为内容创建的布局中,设置字体大小以匹配上述“textSize”变量的最终结果。您可以直接在布局中使用“dp”单位。

如果您还有其他问题,请让我知道它们是什么,不要只是投票。