Сегодня мы займемся стилизацией строк. Отмечу, что существует два подхода: форматирование строки в ресурсах при помощи тегов — простое и часто достойное решение. Второй подход — это форматирование при помощи Span в рантайме,чуть сложнее, но гораздо мощнее. Сегодня рассмотрим первый подход.

Курсив, подчеркнутый, жирный, зачеркнутый и другие виды форматирования

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

Тег Результат применения
<b> жирный текст
<i> курсив
<u> подчеркнутый текст
<strike> зачеркнутый текст
<big> тест по-больше
<small> текст по-меньше
<sub> текст и подстрочный текст
<sup> текст и надстрочный текст

На заметку: точно такие же теги можно использовать при оформлении обычных HTML-документов. Если вам это интересно, то ознакомится с ними можно на сайте W3Schools.

Приведу пример сторки заданной в ресурсном файле strings.xml:


<string name="html_style_string">Normal
<b>Bold</b>n
<i>Italic</i>n
<u>Underlined</u>n
<tt>Monospace</tt>n
<big>Big</big>n
<small>Small</small>n
text with<sup>Superscript</sup>n
text with<sub>Subscript</sub>n
<strike>Striked text</strike>
</string>

Результат применения вы видели в на изображении в самом верху статьи.

С-style строки в ресурсах

А что если вам нужно подставить аргумент в строку, вытянутую из ресурсов, наподобии String.format("Some string: %s, some int %d")? Такая возможность есть.

В таком случае задаем ресурс в виде:


<string name="c_style_string">что-нибудь "%s" что-нибудь еще</string>

При этом предполагается, место %s займет некий аргумент. Давайте рассмотрим пример. Спроектируем небольшое приложение, интерфейс которого будет иметь вид:

Подстановка аргумента в строку

Разметка рабочей области будет иметь вид:


<TextView
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="center"
android:textColor="#ffFF0000"
android:text="С-style строки с аргументами в ресурах"/>
<TextView
android:id="@+id/c_style_output"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:gravity="center"
android:text="Введи значание и нажми кнопку"/>
<EditText
android:id="@+id/c_style_input"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:padding="10dp"
android:hint="Введите аргумент для постановки"/>
<Button
android:id="@+id/button_input"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="Зафигачить аргумент!"/>

А инициализироваться виджеты будут так:


private void setUpView() {
final EditText input = (EditText)findViewById(R.id.c_style_input);
final TextView output = (TextView)findViewById(R.id.c_style_output);
final Button button = (Button)findViewById(R.id.button_input);

OnClickListener listener = new OnClickListener() {

@Override
public void onClick(View v) {
String arg = input.getText().toString();
String cStyle = getResources().getString(R.string.c_style_string, arg);

output.setText(cStyle);
}
};

button.setOnClickListener(listener);
}

Особое внимание на строки:


String arg = input.getText().toString();
String cStyle = getResources().getString(R.string.c_style_string, arg);

У метода с переменным числом аргуметов getString() первый аргумент — это id строки в виде R.string.string_name, а все последующие аргументы метода будут использоваться для подстановки.

Заключение

Сегодня мы научились красиво форматировать наш текст и по-новому использовать строки, хранимые в ресурах.

Исходники: iDevStylishText.

Спасибо за внимание!

Happy Coding! =)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *