Динамическое отображение текста с помощью TextView (Android) - PullRequest
0 голосов
/ 19 января 2011

В основном то, что я хочу сделать в своем приложении для Android, - это использовать TextView для одновременного отображения двух разных фрагментов текста.Итак, в коде я хочу иметь возможность сделать что-то вроде этого:

    LinearLayout ll = new LinearLayout(this);
    TextView text = new TextView(this);
    text.setTextColor(0xFF000000);
    text.setGravity(Gravity.CENTER_HORIZONTAL);
    text.setTextSize(20f);
    text.setText("Text1");
    text.setTextSize(14f);
    text.setColor(0xFF0000FF);
    text.setText("\nText2");
    ll.addView(text);

Чтобы уточнить, я пытаюсь отобразить черный "Text1" и синий "Text2" одновременно, используя только один TextView,Очевидно, что это не работает с помощью кода выше.Я подумал об использовании второго TextView, но это кажется пустой тратой усилий и памяти.Я уверен, что блестящие умы могут найти лучшее решение для этого.

Заранее большое спасибо за ваше время и вашу помощь.

Ответы [ 5 ]

3 голосов
/ 19 января 2011

Для вас есть два варианта.

Один -

Spannable

, а другой -

fromHtml(Источник строки)

Чтобы вы могли получить желаемый результат.

1 голос
/ 19 января 2011

Я думаю, что с текущей версией кода вы можете видеть только самый последний текст (Text2). Если вы хотите, чтобы два текста выглядели по-разному, я бы предложил использовать два отдельных TextView. Это добавило бы больше гибкости.

Если вы не собираетесь изменять этот код пользовательского интерфейса позже, вы можете рассмотреть Html.toHtml () в вызове setText ().

0 голосов
/ 19 января 2011

Как только View добавляется к ViewGroup, из которых LinearLayout является потомком, вам не нужно читать его для обновленияего отображение.Если вы предварительно вносите какие-либо изменения в представление, для которого требуется изменить его отображение, оно будет обрабатывать все надлежащие уведомления о необходимых перерисовках или ретрансляциях, вызывая View#invalidate и View#requestLayout, где это необходимо.,

Кроме того, поскольку все изменения пользовательского интерфейса обрабатываются в одном потоке, вам не нужно беспокоиться о вызове нескольких методов, которые обновят пользовательский интерфейс.Это связано с двумя причинами: во-первых, выполнение перерисовок не произойдет до тех пор, пока ваш код не будет завершен, во-вторых, в Android встроена оптимизация, которая объединяет несколько недействительных вызовов в один.

Итак, единственное, о чем вам нужно беспокоиться, это получить правильную ссылку на ваш экземпляр TextView, а затем вы можете вызвать все методы, которые вам нужны, чтобы он отображалсячто ты хочешь.

Поскольку вы создаете View s вручную, а не из xml, вам нужно добавить свой корень ViewGroup в Activity, вызвав Activity#setContentView.

Редактировать:

Тогда вам нужно будет узнать о SpannableString и SpannableStringBuilder.Здесь есть очень краткая документация: Выбор, выделение или стилизация частей текста

0 голосов
/ 19 января 2011

когда вы планируете обновить textview?Если вы нажмете кнопку, получите ссылку на textview и в onClickListener () обновите текст, цвет и т. Д. Все, что вы хотите сделать.

После просмотра ваших других комментариев, я думаю SpannableString - это то, что вы ищете

0 голосов
/ 19 января 2011

Кажется, проблема в следующем:

LinearLayout.addView(text);

Вы пытаетесь добавить представление в LinearLayout, но макет не существует (в текущем действии).Вам необходимо добавить TextView в макет, определенный в используемом вами XML-файле.Предположим, у вас есть LinearLayout с идентификатором «linearlayout01» в XML-файле «activity1.xml», вы должны сделать что-то вроде:

setContentView(R.layout.activity1);

// Create and adjust TextView text

...

LinearLayout layout = (LinearLayout) findViewById(R.id.linearlayout01);
layout.addView(text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...