Изменение размера шрифта в AlertDialog
Я пытаюсь поместить некоторый текст loooong в 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());
вопросы: макет прокручивается, bute нет "инерции" (не знаю, как это назвать.. Но я думаю, ты понимаешь.)
Способ 3) использование Scrollview.
вот что я собираюсь попробовать, но я не могу поверить, что нет более простых решений...
5 ответов
вы действительно можете получить доступ к сообщений 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
или нет.
Я использую следующий код для изменения заголовка и текста сообщения для 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
методы.
Для Кнопки:
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();
вот мое решение... вам нужно создать контейнер прокрутки, а затем добавить 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);
эту проблему можно решить с помощью SpannableStringBuilder вместо строки.
http://www.android--tutorials.com/2016/10/android-change-alertdialog-title-text_21.html