Содержание
Сегодня мы займемся стилизацией строк. Отмечу, что существует два подхода: форматирование строки в ресурсах при помощи тегов — простое и часто достойное решение. Второй подход — это форматирование при помощи 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! =)
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: