Отображение нескольких строк текста и переменных в AlertDialog с помощью setMessage () - PullRequest
34 голосов
/ 06 мая 2011

Мне нужно отобразить несколько строк текста в диалоге оповещения. Если я использую несколько методов setMessage (), отображается только последний метод setMessage, как показано ниже.

final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
                alertDialog.setTitle("Statistics:");
                alertDialog.setMessage("No. of attempts: " + counter);
                alertDialog.setMessage("No. of wins: " + counterpos);
                alertDialog.setMessage("No. of losses: " + counterneg);

Есть ли способ создать новую строку для каждого из них в диалоге? Как использовать \ n в System.print.out (); способ.

Спасибо!

Ответы [ 4 ]

73 голосов
/ 06 мая 2011

Вы можете сделать что-то вроде этого

String alert1 = "No. of attempts: " + counter;
String alert2 = "No. of wins: " + counterpos;
String alert3 = "No. of losses: " + counterneg;
alertDialog.setMessage(alert1 +"\n"+ alert2 +"\n"+ alert3);   
23 голосов
/ 06 мая 2011

Вы можете просто создать одну строку из всего, что вы хотите показать, и добавить "\ n" там, где вы хотите, чтобы разрывы строк были.

alertDialog.setMessage("No. of attempts: " + counter + "\n" + 
            "No. of wins: " + counterpos + "\n" + 
            "No. of losses: " + counterneg);

Или даже лучше использовать StringBuilder:

StringBuilder sb = new StringBuilder();
sb.append("No. of attempts: " + counter);
sb.append("\n");
sb.append("No. of wins: " + counterpos);
sb.append("\n");
sb.append("No. of losses: " + counterneg);
alertDialog.setMessage(sb.toString());

И лучший способ сделать это - извлечь статический текст в строковый ресурс (в файле strings.xml).Используйте% d (или% s, если вы хотите вставить строки, а не целые числа), чтобы получить динамические значения в нужных местах:

<string name="alert_message">No. of attempts: %1$d\nNo. of wins: %2$d\nNo. of losses: %3$d</string>

А затем в коде:

String message = getString(R.string.alert_message, counter, counterpos, counterneg);
alertDialog.setMessage(message);
12 голосов
/ 01 августа 2012

Вы также можете вставить новые строки прямо в файл strings.xml:

<string name="my_string_text">This would revert your progress.\n\n Are you sure you want to proceed?</string>

1 голос
/ 21 февраля 2019

Kotlin упрощает решение за счет:

  • , связывающих вызовы установленных методов
  • с использованием интерполированных строк

следующим образом:

«AlertDialog.Builder Этот объект Builder, позволяющий связывать вызовы для установки методов» (https://developer.android.com/reference/android/app/AlertDialog.Builder)

    fun alertDemo() {
        var counter: Int = 5

        var counterpos: Int = 2
        var counterneg: Int = 3
        val builder = AlertDialog.Builder(this)
            .setTitle("Statistics:")
            .setMessage("""
                |number of
                |
                |attempts: $counter
                |wins: $counterpos
                |losses: $counterneg
                """.trimMargin())
            .show()
    }

Я подготовил снимок экрана с результатом, но, как и яздесь я, кажется, узнал, что загрузка скриншотов может быть разрешена только для участников сообщества более высокого уровня. Или я что-то пропустил? Спасибо за то, что просветили (возможно, не только) себя :)

Снимок экрана выглядит хорошоформат без отображения полос.

PS: для минималистов, из-за цепочки, мы могли бы даже исключить избыточный "val builder ="

...