Текст С Разметкой В ​​Android.widget.textview

Недавно мне нужно было сделать довольно хитрый чат в Android-приложении.

Помимо самой информации, необходимо было донести до пользователей дополнительный функционал в контексте конкретного сообщения: имя автора сообщения должно вставляться в текстовое поле ответа при нажатии на него, и если это сообщение Что касается вновь созданной игровой сессии, пользователи должны иметь возможность присоединиться к игре, щелкнув по ней, и так далее.

.

Одним из основных требований была возможность создать сообщение, содержащее множество ссылок, что задавало направление исследования.

Веб-представление , обладающий требуемым функционалом, был отклонен из-за строгости решения: я даже не стал создавать 100 или сколько угодно копий для тестирования, по одной на каждое сообщение, так как сразу было понятно, что такая расточительность нормально работать не будет. К счастью, наиболее распространенный ТекстВью обладает неожиданно потрясающей функциональностью верстки текста и может использоваться как отдельный элемент, так и служить целой страницей, будучи несравненно легче, чем Веб-представление .

Я реализовал весь необходимый мне функционал и узнал ещё несколько довольно интересных вещей, столкнувшись с рядом подводных камней (впрочем, не очень острых).

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



Задания

В этом примере мы создадим приложение с двумя Активность , один из которых содержит ТекстВью , играющий роль браузера, из которого, в частности, можно вызвать второй Активность , демонстрируя, как работать с параметрами вызова.

Мы рассмотрим, как можно создавать и связывать страницы текста с макетом и изображениями.

Содержимое страниц берется из строк ресурсов приложения, а изображения представляют собой ресурсы, доступные для рисования.

Незначительные изменения в коде позволят использовать другие локации.



Текст с разметкой в ​​android.widget.TextView



Создание приложения

Создаем обычное приложение любым удобным для нас способом: AndroidMainfest.xml
  
   

<manifest xmlns:android="http://schemas.android.com/apk/res/android " package="com.example.markup.tutorial" android:versionCode="1 " android:versionName="1.0 "> <uses-sdk android:minSdkVersion="7 " android:targetSdkVersion="15 " /> <application android:icon="@drawable/ic_launcher " android:label="@string/app_name " android:theme="@style/AppTheme "> <activity android:name=".

MainActivity " android:label="@string/title_activity_main "> <intent-filter> <action android:name="android.intent.action.MAIN " /> <category android:name="android.intent.category.LAUNCHER " /> </intent-filter> </activity> <activity android:name=".

AnotherActivity " android:exported="false "> <intent-filter> <data android:scheme="activity-run " android:host="AnotherActivityHost " /> <action android:name="android.intent.action.VIEW " /> <category android:name="android.intent.category.DEFAULT " /> </intent-filter> </activity> </application> </manifest>

Несколько уточнений по манифесту.

Если с первого Активность все понятно, во-вторых( Другая деятельность ) содержит некоторые дополнительные дескрипторы.

Android:exported="ложь" необходимо для того, чтобы компилятор не выдавал предупреждений о том, что мы забыли что-то указать в экспортируемом компоненте.

На мой взгляд, это чисто декоративный момент, но чем меньше желтых треугольников, тем спокойнее.

Глава фильтр намерений содержит дескрипторы того, как и при каких обстоятельствах произойдет запуск Активность .

значит, ты можешь бежать Активность поставить лайк Activity-run://AnotherActivityHostЭparams .

Ценности действие И категория необходимо, чтобы система обнаружила и запустила Активность .

MainActivity.java

package com.example.markup.tutorial; import org.xml.sax.XMLReader; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.Html; import android.text.Spannable; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.widget.TextView; public class MainActivity extends Activity {

Теги: #Android #textview #HTML #разработка для Android

Вместе с данным постом часто просматривают: