Как определить максимальную длину текста для кнопок AlertDialog? - PullRequest
3 голосов
/ 13 ноября 2011

У меня возникла проблема с очень, очень простым AlertDialog, который создает мой диалог About с тремя вариантами выбора. Посмотрите, как это выглядит на эмуляторе, моем HTC Sensation и Galaxy S2:

AlertDialog on three different devices

Диалог создается этим (псевдо) кодом:

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

Это так просто, я никогда не думал о максимальной разнице в тексте на разных устройствах! Плюс: я думаю, что отрыв Samsung от «Disclaimer» - это такой беспорядок, не говоря уже о том, что слово «Market» отсутствует.

Как я должен создать простой AlertDialog, когда это уже является проблемой? Есть какие-нибудь подсказки? Подумайте об устройстве, которое устанавливает такой большой шрифт, что даже «Отмена» больше не подходит! вздох Как я могу предотвратить такие вещи?

Спасибо за советы !!

Ответы [ 2 ]

1 голос
/ 19 октября 2012

Ответ от Дрю ДеНардо почти правильный.

myDialog.getButton (BUTTON_POSITIVE) возвращает ноль, поскольку он не был создан.

Вам необходимо переопределить 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);
    }
});
0 голосов
/ 15 ноября 2011

Укажите размер шрифта в единицах «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" прямо в макете.

Если у вас есть дополнительные вопросы, пожалуйста, дайте мне знать, что они, а не просто понизьте.

...