Изменение размера шрифта в AlertDialog - PullRequest
35 голосов
/ 03 июля 2011

Я пытаюсь поместить какой-нибудь более длинный текст в AlertDialog. Единственная проблема - размер шрифта по умолчанию, который действительно слишком велик, поэтому я хочу уменьшить его.

Вот все обходные пути, которые я пробовал, и их проблемы.

Обходной путь 1) Использование TextView и myView.setTextSize (12);

final TextView myView = new TextView(getApplicationContext());
myView.setText(myLongText);
myView.setTextSize(12);
final AlertDialog d = new AlertDialog.Builder(context)
    .setPositiveButton(android.R.string.ok, null)
.setTitle(myTitle)
.setView(myView)
.create();

Проблемы : макет не прокручивается

Обходной путь 2) , обеспечивающий прокрутку TextView.

message.setMovementMethod(LinkMovementMethod.getInstance());

Проблемы : Макет прокручивается, но нет "инерции" (не знаю, как это назвать .. Но я думаю, вы понимаете.)

Обходной путь 3) Использование прокрутки.

Это то, что я собираюсь попробовать, но я не могу поверить, что нет более простых решений ...

Ответы [ 5 ]

108 голосов
/ 03 июля 2011

Вы можете довольно легко получить доступ к TextView сообщения, а затем изменить его размер. Я проверил с большим размером, но вы можете использовать любой размер, который вы хотите. Текст будет хорошо прокручиваться, как и раньше. id вида android.R.id.message

    AlertDialog dialog = new AlertDialog.Builder(this).setMessage("Hello world").show();
    TextView textView = (TextView) dialog.findViewById(android.R.id.message);
    textView.setTextSize(40);

Это, вероятно, более чистое решение, хотя я не уверен, есть ли риск, что TextView может быть null или нет.

25 голосов
/ 08 февраля 2012

Я использую следующий код, чтобы изменить заголовок и текст сообщения для AlertDialog…

final int alertTitle = ctx.getResources().getIdentifier("alertTitle", "id", "android");
setTitleFont((TextView) dlg.findViewById(alertTitle));
setBodyFont((TextView) dlg.findViewById(android.R.id.message));

… чтобы убедиться, что я проверяю null в моих setTitleFont и setBodyFont методах.

5 голосов
/ 09 июня 2016

Для кнопок:

  final AlertDialog ad = new AlertDialog.Builder(mainScreen)
.setPositiveButton("OK", null) 
.setNegativeButton("Cancel", null).create();

ad.setOnShowListener(new DialogInterface.OnShowListener() {
                                            @Override
                                            public void onShow(DialogInterface dialog) {
                                                int textSize = (int) Helper.getDimen(mainScreen, R.dimen.textSize12);
                                                ad.getButton(Dialog.BUTTON_POSITIVE).setTextSize(textSize);
                                                ad.getButton(Dialog.BUTTON_NEGATIVE).setTextSize(textSize);
                                            }


                                      });

ad.show();
4 голосов
/ 13 октября 2011

Вот мое решение ... вам нужно создать контейнер прокрутки, а затем добавить TextView внутри ScrollView так же, как в XML-макете.

AlertDialog alertDialog = new AlertDialog.Builder(this).create();
String str = getString(R.string.upgrade_notes); 
final ScrollView s_view = new ScrollView(getApplicationContext());
final TextView t_view = new TextView(getApplicationContext());
t_view.setText(str);
t_view.setTextSize(14);     
s_view.addView(t_view);
alertDialog.setTitle("Upgrade notes!");
alertDialog.setView(s_view);
0 голосов
/ 14 марта 2018

Вы можете решить эту проблему, используя SpannableStringBuilder вместо строки.

http://www.android - tutorials.com/2016/10/android-change-alertdialog-title-text_21.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...