Определение размера многострочного TextView для Android - PullRequest
10 голосов
/ 23 октября 2010

У меня есть действие, в котором я хочу отобразить заголовок, который занимает верхнюю четверть приложения и отображает динамический набор текста. В некоторых случаях все это помещается на одной строке, и я бы хотел, чтобы размер шрифта увеличивался, чтобы он был большим и легким для чтения. В некоторых случаях он будет на нескольких строках (обычно меньше 4) и должен быть меньше.

Сложность состоит в том, что, если я явно устанавливаю символы новой строки в setText, иногда он вставляет новую строку там, где я ее не ожидал, т. Е .:

"My first line of text\nMy Second line of text"
Might get turned into (it's right adjusted in this version):
"My first line of
             text
   My second line
          of text"

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

Должен ли я просто явно установить размер шрифта очень маленьким, чтобы правильно его расположить, а затем вручную отрегулировать размер? Есть ли «лучшая практика», которую я должен использовать для этого? Если бы я установил размер шрифта достаточно большим, это бы сработало, но было бы неплохо выяснить, каким будет «правильный» способ сделать это. И я бы предпочел не добавлять вручную 4 однострочных TextViews и форматировать их самостоятельно.

Используемый мной макет XML:

<TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="10dip"
        android:layout_marginRight="8dip"
        android:singleLine="false"
        android:ellipsize="marque"
        android:gravity="right|bottom"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textSize="30sp"
/>

Ответы [ 4 ]

1 голос
/ 16 декабря 2012

Вы можете посчитать длину строки и установить размер текста, соответствующий размеру каждой длины

что-то в этой форме

if(myString.length()==40){
    myTextview.setTextSize(11);
else if(myString.length()==25){
    myTextview.setTextSize(16);
...

Надеюсь, это поможет.

0 голосов
/ 10 сентября 2012

Существует еще одно решение, которое вы можете использовать WebView, чтобы делать то, что вы хотите, чтобы проверить этот Android TextView Justify Text подробный ответ. используя webview, вам не нужно заботиться о выравнивании линий, вы можете управлять этим с помощью свойства html css

0 голосов
/ 10 сентября 2012

Позвольте мне повторить ваш вопрос, чтобы убедиться, что я вас правильно понял.

  1. вы всегда вводите от 1 до 4 строк текста
  2. вы всегда и только хотите остановиться наконец строки, если у вас более одной строки
  3. , вы хотите, чтобы каждая строка была как можно большей, чтобы она соответствовала текстовому представлению, которое составляет 1/4 высоты экрана?

Я предлагаю вам создать пользовательский вид :

  • , использовать Paint.getTextBounds для динамического определения наилучшего размера текста в коде
  • для рисования текста вы можете использовать вспомогательный класс StaticLayout для управления выравниванием и т. Д.
  • , чтобы ваш пользовательский вид занимал 1/4 экрана или поместите его в LinearLayoutи используйте layout_weight, чтобы присвоить ему высоту или установить его программно в View.onMeasure
0 голосов
/ 07 апреля 2012

Вы можете сделать это. Добавьте новую строковую характеристику к строковому значению. Затем установите это строковое значение в качестве текстового атрибута TextView.

String temp = "ASDF \n"+"EFG \n"+"HIJ";
TextView tv=//find it from the context
tv.setText(temp);
...