- 400+ Android & Flutter Code
- Saturday, January 3, 2015
- How to change TextView background color in android
- Set TextView background color programmatically
- Android TextView: Change color of select handlers
- Issue
- Select handlers
- It is time to change the handler’s color
- In search of other solutions
- Extended TextView component
- TextView
- Программная установка текста
- Атрибуты
- Программная установка фона
- Реагируем на событие onClick
- Многострочный текст
- Увеличиваем интервалы между строками
- Бой с тенью
- Создание ссылок автоматом
- Совет: Используйте полупрозрачность с умом
- Выделить текст для копирования
400+ Android & Flutter Code
Example code for android + flutter app developers.
Saturday, January 3, 2015
How to change TextView background color in android
TextView display text on android application. android developer can change TextView background color both programmatically at run time in java file and statically by declarative syntax in xml layout file or xml xml resource file.
the following example code demonstrate us how can we set or change the TextView background color by declarative syntax. in this example we did not make any changes on java file, so we does not include java file here.
in this exampe code we include few TextView widgets. we define their background color by various way. the simple way to define TextView background color is its android:background attribute. we can assign a Hexadecimal color string for this attribute to generate TextView background color.
Hexadecimal color is specified with an RGB value and optional alpha channel. in this example code we uses the following hexadecimal color format to define Textview background color, those are #RGB, #ARGB, #RRGGBB and #AARRGGBB. in this hexadecimal color format ‘A’ describe alpha channel, ‘R’ describe red channel, ‘G’ describe green channel and ‘B’ describe blue channel.
Color is a simple resource which we can reference using the value provided in the name attribute not the name of xml file. so we can combine color resources with other simple resources in a single xml file. ech color resource is a name value pair. resource file saved on res/values folder.
in this example we create a resource file to store color names. this xml resource file name is colors.xml and its located at res/values/colors.xml. we saved our preferred colors name and value in the xml file to use them on app widgets.
finally. we can define TextView background color from xml resource file by android:background attribute as android:background=»@color/AliceBlue». the specified TextView will display AliceBlue background on app.
Set TextView background color programmatically
Источник
Android TextView: Change color of select handlers
Jun 8, 2020 · 4 min read
Android widget TextView has the ability to select a part of the text that is activated by a long press. The selected part is changed using sticks, that is called SelectHandler.
Issue
There is a question— change color of these handlers. First let’s look at where it is set in Android. It should be noted that we use the Material theme in our app, and minSdk = 21
Select handlers
The widget TextView has attributes textSelectHandleLeft and textSelectHandleRight, that get drawable resource. Let’s see what resources are used in the theme. So go to themes_material.xml :
For exam p le, let’s explore the left handler, because right one work the same way. Go to the drawable text_select_handle_left_material .xml:
Resource android:src is simple png, that has white color by default. The color for it is set by the attribute value android:tint, in this case it is ? attr/colorControlActivated . If this attribute is not overridden in app theme, it has theme color ?colorAccent , that is our app has turquoise color, as we can see on first screenshot.
It is time to change the handler’s color
Now it became clear how the SelectHandlers is built, so let’s try to change their color. The most obvious solution is to override the colorControlActivated attribute in the theme of our application . I suggest setting a red color:
This solution works, but there may be a problem: the attribute sets the color for some other components, which will also turn red. We can find the description about this color attribute in official doc:
The color applied to framework controls in their activated (ex. checked) state.
To check it, let’s add some other components to the layout to view the correct color:
Therefore we need to find a way to changing color for TextSelectHandlers only.
In search of other solutions
- Widget TextView has methods getTextSelectHandleLeft() иgetTextSelectHandleRight (), which return the drawable of handlers, and these drawables can be tint programmatically at the point of use. But bad news— those methods was added in API level 29 only, therefore this solution is not suitable for us
- We can override attributes for handler’s drawables in theme of our app, and specify the desired color in it. But is can be difficult to draw new icons, seems better to use system’s drawables. Ok, as we saw before, the system uses icon @drawable/text_select_handle_left_mtrl_alpha, maybe reuse it with new tint color? — Answer is no, this resource is private, we can’t use it in the app:
AAPT: error: resource android:drawable/text_select_handle_left_mtrl_alpha is private.
- Ok, we need change color of handlers for specific TextView, not all TextViews in all project. As we know, in Android, the theme can be installed not only on the app, but also on a specific activity, and even on a specific view. Let’s create new style, that has one overrided color attribute with red value:
And apply this style as theme to the TextView in the layout:
Let’s launch app and check result:
Awesome, this solution works! And other components — CheckBox and Switch — has base theme color. But let’s make more better.
Extended TextView component
This is inconvenient to set the theme in layout every time, so let’s create new class from TextView, which will have a specific color of handlers. To do this, use the class ContextThemeWrapper, the purpose of which is clearly described in the documentation
A context wrapper that allows you to modify or replace the theme of the wrapped context.
This means we have to wrap context in this Wrapper and set it as parameter of constructor of super-class:
Let’s launch app and make sure it works too:
Источник
TextView
Компонент TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text — текст, view — просмотр).
Находится в разделе Texts.
TextView — один из самых используемых компонентов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00 и т.д., и служит для представления пользователю описательного текста.
Для отображения текста в TextView в файле разметки используется атрибут android:text, например:
Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:
Программная установка текста
Программно текст можно задать методом setText():
Атрибуты
Для всех вышеперечисленных атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.
Программно установим размеры текста при помощи setTextSize() с различными единицами измерения.
По умолчанию у компонентов TextView отсутствует фоновый цвет. Чтобы задать цвет, укажите значение Drawable для атрибута android:background. В качестве значения Drawable может использоваться изображение или XML-представление фигуры, включающий ресурс Drawable (поместить в папку res/drawable).
Программная установка фона
В некоторых случаях программисты из-за невнимательности неправильно меняют фон элемента программным способом и удивляются, почему ничего не работает.
Предположим, у вас определён в ресурсах зелёный цвет:
Следующий код будет ошибочным:
Нужно так (два варианта):
Реагируем на событие onClick
Если вы хотите, чтобы TextView обрабатывал нажатия (атрибут android:onClick), то не забывайте также использовать в связке атрибут android:clickable=»true». Иначе работать не будет!
Многострочный текст
Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.
Например, в ресурсах:
Обратите внимание, что в тексте также применяется простое форматирование.
Также перенос на новую строку можно задать в коде:
Увеличиваем интервалы между строками
Вы можете управлять интервалом между соседними строчками текста через атрибут android:lineSpacingMultiplier, который является множителем. Установите дробное значение меньше единицы, чтобы сократить интервал или больше единицы, чтобы увеличить интервал между строками.
Бой с тенью
Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor, shadowDx, shadowDy и shadowRadius. С их помощью вы можете установить цвет тени и ее смещение. Во время установки значений вы не увидите изменений, необходимо запустить пример в эмуляторе или на устройстве. В следующем примере я создал тень красного цвета со смещением в 2 пикселя по вертикали и горизонтали. Учтите, что для смещения используются единицы px (пиксели), единицы dp не поддерживаются.
Программный эквивалент — метод public void setShadowLayer (float radius, float dx, float dy, int color):
Создание ссылок автоматом
У TextView есть ещё два интересных свойства Auto link (атрибут autoLink) и Links clickable (атрибут linksClickable), которые позволяют автоматически создавать ссылки из текста.
Выглядит это следующим образом. Предположим, мы присвоим элементу TextView текст Мой сайт: developer.alexanderklimov.ru и применим к нему указанные свойства.
При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр phone), то запустится звонилка.
У ссылки есть интересная особенность — при длительном нажатии на ссылку появляется диалоговое окно, позволяющее скопировать ссылку в буфер обмена.
Атрибут autoLink позволяет комбинировать различные виды ссылок для автоматического распознавания: веб-адрес, email, номер телефона.
Цвет ссылки можно поменять через свойство Text color link (XML-атрибут textColorLink), а программно через метод setTextLinkColor().
Программно можно установить ссылки на текст через класс Linkify:
Кроме константы ALL, можно также использовать Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, Linkify.PHONE_NUMBERS. К сожалению, русские адреса не распознаются. В моём случае индекс был распознан как телефонный номер, а город и улица не стали ссылкой.
В таких случаях придётся самостоятельно добавить ссылки в текстах. Например, определим ссылку в ресурсе:
Присвоим созданный ресурс тексту в TextView и запустим пример. Сам текст будет выглядеть как ссылка, но реагировать не будет. Чтобы исправить данную проблему, добавим код:
Ссылки в тексте выглядят не совсем удобными. Есть отдельная библиотека, которая улучшает функциональность. Описание проблем и ссылка на библиотеку есть в статье A better way to handle links in TextView — Saket Narayan.
Совет: Используйте полупрозрачность с умом
Если вам нужно установить текст полупрозрачным, то не используйте атрибут android:alpha:
Дело в том, что такой подход затрачивает много ресурсов при перерисовке.
Атрибут textColor позволяет установить полупрозрачность без потери производительности:
Выделить текст для копирования
По умолчанию, текст в TextView нельзя выделить для копирования. Но в API 11 появилась такая возможность, которая может пригодиться. Делается либо при помощи XML-атрибута android:textIsSelectable, либо через метод setTextIsSelectable().
Добавьте в разметку два компонента TextView и одно текстовое поле EditText для вставки скопированного текста. У первой текстовой метки установим возможность выделения текста декларативно.
Для второго компонента возможность выделения создадим программно.
Сделайте долгий тап на тексте в любом TextView. Увидите стандартные ползунки для выбора длины текста. Скопируйте текст, сделайте длинный тап в EditText и вставьте текст.
Источник