что такое show text id на андроид

Android Notifications. Оповещения через Status Bar

Добрый день, хабровчане. Давно занимаюсь разработкой под Android и хотелось бы рассказать сообществу о правильном подходе к созданию уведомлений.

Ниже, помимо описанного ранее, мы рассмотрим добавление прогрессбара, обработку события по нажатию на уведомлений, различные варианты состояний уведомлений. Рассмотрим добавленный на днях в Compatibility library Notification.Builder. А также поговорим о рекомендациям по UI (design guidlines), которые гугл рекомендует соблюдать при создании уведомлений.

Guidlines
Как советуют разработчики Android в официальном гайдлайне

Когда показывать уведомления:
Когда не стоит показывать уведомления:
Хорошая практика:
Архитектура:

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

В ней всегда хранятся ссылки на все созданные во время работы приложения уведомления, которые ещё отображены в статус-баре.

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

private static NotificationUtils instance;

private static Context context;
private NotificationManager manager; // Системная утилита, упарляющая уведомлениями
private int lastId = 0; //постоянно увеличивающееся поле, уникальный номер каждого уведомления
private HashMap notifications; //массив ключ-значение на все отображаемые пользователю уведомления

Создание уведомления с помощью NotificationCompat.Builder:
Для того чтобы воспользоваться классами, входящими в библиотеку поддержки прошлых версий (Compatibility library), нужно добавить в проект библиотеку из папки /extras/android/support/v4/android-support-v4.jar
Если же проект нацелен на Android 3.0 и выше, то добавлять ничего не нужно достаточно обратиться к Notification.Builder

public int createInfoNotification( String message) <
Intent notificationIntent = new Intent(context, HomeActivity. class ); // по клику на уведомлении откроется HomeActivity
NotificationCompat.Builder nb = new NotificationCompat.Builder(context)
//NotificationCompat.Builder nb = new NotificationBuilder(context) //для версии Android > 3.0
.setSmallIcon(R.drawable.ic_action_picture) //иконка уведомления
.setAutoCancel( true ) //уведомление закроется по клику на него
.setTicker(message) //текст, который отобразится вверху статус-бара при создании уведомления
.setContentText(message) // Основной текст уведомления
.setContentIntent(PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT))
.setWhen(System.currentTimeMillis()) //отображаемое время уведомления
.setContentTitle( «AppName» ) //заголовок уведомления
.setDefaults(Notification.DEFAULT_ALL); // звук, вибро и диодный индикатор выставляются по умолчанию

Notification notification = nb.getNotification(); //генерируем уведомление
manager.notify(lastId, notification); // отображаем его пользователю.
notifications.put(lastId, notification); //теперь мы можем обращаться к нему по id
return lastId++;
>

Создание уведомления с произвольным отображением (Custom layout):

/**
* генерация уведомления с ProgressBar, иконкой и заголовком
*
* @param text заголовок уведомления
* @param topMessage сообщение, уотображаемое в закрытом статус-баре при появлении уведомления
* @return View уведомления.
*/
private RemoteViews createProgressNotification( String text, String topMessage) <
Notification notification = new Notification(R.drawable.ic_stat_example, topMessage, System.currentTimeMillis());
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.notification_download_layout);
contentView.setProgressBar(R.id.notification_download_layout_progressbar, 100, 0, false );
contentView.setTextViewText(R.id.notification_download_layout_title, text);

notification.contentView = contentView;
notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT | Notification.FLAG_ONLY_ALERT_ONCE;

Intent notificationIntent = new Intent(context, NotificationUtils. class );
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.contentIntent = contentIntent;

manager.notify(lastId, notification);
notifications.put(lastId, notification);
return contentView;
>

LinearLayout
android:layout_width =»fill_parent»
android:layout_height =»wrap_content»
android:orientation =»horizontal» >

ImageView
android:id =»@+id/notification_download_layout_image»
android:layout_width =»wrap_content»
android:layout_height =»wrap_content»
android:src =»@drawable/ic_stat_example»
android:layout_gravity =»center_vertical»/>

TextView
android:id =»@+id/notification_download_layout_title»
style =»@style/NotificationTitle»
android:layout_width =»wrap_content»
android:layout_height =»wrap_content»
android:layout_alignParentTop =»true»
android:layout_marginLeft =»10dip»
android:singleLine =»true»
android:text =»notification_download_layout_title»
android:layout_gravity =»center_vertical»/>
LinearLayout >

ProgressBar
android:id =»@+id/notification_download_layout_progressbar»
style =»?android:attr/progressBarStyleHorizontal»
android:layout_width =»fill_parent»
android:layout_height =»wrap_content»
android:layout_marginTop =»4dp»
android:progress =»0″/>

в андроид 2.3 и выше ( API >10) был создан специальный ресурс, в котором системная тема указывает цвета текста уведомений. Из-за этого в старых версиях приходится использовать костыль:

В файл res/values/styles.xml прописываем:

А для поддержки API >10 Создаем файл res/values-v9/styles.xml и вписываем:

Теперь из кода нашего приложения обращаемся к утилите:

NotificationUtils n = NotificationUtils.getInstance(getActivity());
n.createInfoNotification( «info notification» );

Создаем уведомление с прогресс-баром:

int pbId = NotificationUtils.getInstance(getActivity()).createDownloadNotification( «downloading video» );

И во время выполнения потока постоянно обновляем прогресс вызовом:

В итоге получаем:

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

И напоследок маленькая хитрость:

Если не хотите дублирования в стеке одних и тех же Activity — поставьте в манифесте к нужной activity
android:launchMode=»singleTop»

Источник

Show Text ID в Самсунг: что это такое?

Ранее существовал миф, что секретные коды помогали пользователям гаджетам избежать взлома. Однако это неверное утверждение, так как современная техника имеет опцию отображения содержимого в выполненной конфигурации. «Show Text ID» – это функция в Самсунг, позволяющая узнать содержимое кода. Но воспользоваться опцией начинающих пользователям довольно сложно, поэтому проще узнать, какие существуют самые простые кодовые комбинации.

Что это такое

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

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

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

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

Для чего требуется

Если пользователь оказался профессиональным разработчиком мобильных игр, то кодировки понадобятся для серии Galaxy. Другая причина, по которой могут потребоваться комбинации – это эффективное управление смартфоном или другим девайсом от производителя. Так, например, разработчики, которые трудятся над программами для Андроид, узнав такие коды могут сделать настоящее состояние.

Читайте также:  что значит экспресс баллы в перекрестке

Кодировки широко используются в самостоятельном ремонте и диагностике, что помогает избежать обращения в профессиональные сервисные центры. Перед применением важно обращать на конкретную модель телефона.

Источник

Что такое show text id на андроид

Tick this box to proceed to Samsung.com.

Samsung.com Services and marketing information, new product and service announcements as well as special offers, events and newsletters.

Check Preferences

Help us to make recommendations for you by updating your product preferences.

What are you looking for?

Log in to your Samsung Account.

Earn rewards for the things you do every day.

Connect your Samsung appliances, TVs and more.

Get access to our best offers and giveaways.

Don’t have a Samsung Account? Create one now.

To create a Business Support Account, click here.

By submitting this form you agree to our Terms & Conditions and Privacy Policy.

Don’t have a Samsung Account? Create one now.

To create a Business Support Account, click here.

Don’t have an account?

Sign up to get access to:

Change your password

Password is case-sensitive and Must be at least 8 characters and use a combination of letters and numbers.

To create a Business Support Account, click here.

Sign up for a Samsung Account.

Sign up for a Samsung Account today – for easy product registration, perks like exclusive offers, a comprehensive rewards program and much more. Learn more.

Earn rewards for the things you do every day.

Connect your Samsung appliances, TVs and more.

Get access to our best offers and giveaways.

Already have a Samsung account? Log in here.

Did you forget your password?

Enter your email address to reset your password

Your verification link has been sent

Check your email to validate your new password and access your account.

Unable to find the email?

Footer Navigation

SUPPORT

OFFERS

ABOUT US

SUSTAINABILITY

Copyright© 1995-2021 SAMSUNG All Rights Reserved.

Welcome to Samsung

Sign up & get 10% off

Thanks for
signing up!

Check your inbox for a discount code for 10% off your first purchase.

Welcome back.

Looks like you are already a Samsung.com subscriber and aren’t eligible for this one time offer.

Something went wrong. Please try again.

You Are About To Be Redirected To Investor Relations Information for U.S.

Redirect Notification

As of Nov. 1, 2017, the Samsung Electronics Co., Ltd. printer business and its related affiliates were transferred to HP Inc.

Источник

Отображение текста в Android

Отображение текстовой информации — наверное, самая базовая и важная часть многих Android-приложений. В данной статье пойдет речь о TextView. Каждый разработчик, начиная с «Hello World», постоянно сталкивается с этим элементом пользовательского интерфейса. Периодически в работе с текстом приходится задумываться о реализации различных дизайнерских решений или улучшении производительности при отрисовке экрана.

Я расскажу об устройстве TextView и некоторых тонкостях работы с ним. Основные советы были взяты из докладов прошедших Google I/O.

TextView под капотом

Для отрисовки текста в Android под капотом используется целый стек из различных библиотек. Их можно разделить на две основные части — java-код и нативный код:

Java-код по сути является частью Android SDK, доступной разработчикам приложений, и новые возможности из него могут быть перенесены в support library.

Само ядро TextView написано на C++, что ограничивает портирование в support library реализованных там новых возможностей из новых версий операционной системы. Ядро представляет из себя следующие библиотеки:

Измерение длины текста и перенос строк

Если передать строку библиотеке Minikin, которая используется внутри TextView, то первым делом она определяет, из каких глифов строка состоит:

Поиск глифов только в системных шрифтах может повлечь за собой сложности, особенно если через символы отображаются иконки или эмодзи, а в одной строке предполагается комбинировать символы из разных шрифтов. Поэтому, начиная с Android Q (29), появилась возможность сделать свой список шрифтов, поставляемых с приложением. Этот список будет использоваться для поиска глифов:

Теперь с использованием CustomFallbackBuilder при сопоставлении символов с глифами SDK будет перебирать указанные font family по порядку, и если не удастся найти соответствие, поиск продолжится в системных шрифтах (а через метод setSystemFallback() можно указать предпочитаемый системный font family). CustomFallbackBuilder имеет ограничение на количество font family – можно добавить не более 64 шрифтов.

Библиотека Minikin разделяет строки на слова и делает измерение отдельных слов. Для ускорения работы, начиная с Lollipop (21), используется системный LRU кэш из слов. Такой кэш дает огромный выигрыш в производительности: вызов Paint.measureText() для закешированного слова займет в среднем 3% от времени первого расчета его размеров.

При значении breakStrategy=simple библиотека просто будет расставлять переносы последовательно, проходя по тексту: как только строка перестает помещаться, ставится перенос перед последним словом.

В значении balanced библиотека постарается сделать переносы строк так, чтобы строки оказались выровнены по ширине.

Читайте также:  что значит температура комфорта спального мешка

Производительность отрисовки текста в зависимости от выбранных флагов (измерялась на Android P (28)):

При использовании переноса слов надо учитывать, что на работу библиотеки будет влиять текущий выбранный язык в операционной системе. В зависимости от языка система будет выбирать специальные словари с правилами переноса.

Стили текста

В Android есть несколько способов стилизации текста:

Единый стиль подразумевает под собой использование XML-стилей или XML-атрибутов в разметке TextView. При этом система будет применять значения из ресурсов в следующем порядке: TextAppearance, тема (Theme), стиль по умолчанию (Default style), стиль из приложения, и наибольший приоритет — значения атрибутов View.

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

Различные способы стилизации TextView можно комбинировать, но стоит помнить о приоритете того или иного метода, что будет влиять на конечный результат:

Еще один способ — рисование текста на канве — дает разработчику полный контроль над выводом текста: например, можно нарисовать текст вдоль кривой линии. Но такое решение в зависимости от требований может быть достаточно сложным в реализации и выходит за рамки этой статьи.

Spans

Для тонкой настройки стилей в TextView используются span’ы. С помощью span’ов можно изменить цвет диапазона символов, сделать часть текста в виде ссылок, изменить размер текста, нарисовать точку перед параграфом и т.д.

Можно выделить следующие категории span’ов:

В android фреймворке определено порядка 20+ span’ов, так что прежде чем делать свой собственный, лучше проверить, нет ли в SDK подходящего.

Appearance vs metric affecting spans

Character vs paragraph affecting spans

Paragraph span влияет на целый блок текста: может изменить выравнивание, отступ или даже вставить точку в начале параграфа. Такие span’ы должны наследоваться от класса ParagraphStyle и вставляться в текст ровно с начала параграфа до его конца. Если диапазон окажется неверным, то span не будет работать.

В Android параграфами считается часть текста, отделённая символами перевода строки ( \n ).

Написание своих span’ов

При написании собственных span’ов надо определиться, что будет затрагивать span, чтобы выбрать, от какого класса надо наследоваться:

Вот пример span’а для смены шрифта:

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

Применим span к тексту:

Но точно такой же результат можно получить, скомбинировав два span’а: возьмем наш предыдущий CustomTypefaceSpan и BackgroundColorSpan из Android фреймворка:

При передаче стилизованной строки через Intent или буфер обмена в случае самописного span’а разметка не сохранится. При использовании span’ов из фреймворка разметка останется.

Использование span’ов в тексте

Для стилизованного текста во фреймворке есть два интерфейса: Spanned и Spannable (с неизменяемой и изменяемой разметкой соответственно) и три реализации: SpannedString (неизменяемый текст), SpannableString (неизменяемый текст) и SpannableStringBuilder (изменяемый текст).

Изменяемый текст Изменяемая разметка
SpannedString нет нет
SpannableString нет да
SpannableStringBuilder да да

Добавить новый span к строке можно при помощи метода:

setSpan(Object what, int start, int end, int flags)

Через первый параметр передается span, затем указывается диапазон индексов в тексте. И последним параметром можно управлять, какое будет поведение span’а при вставке нового текста: будет ли span распространяться на текст, вставленный в начальную или конечную точки (если в середину вставить новый текст, то span автоматически применится к нему вне зависимости от значений флага).

Перечисленные выше классы различаются не только семантически, но и тем, как они устроены внутри: SpannedString и SpannableString используют массивы для хранения span’ов, а SpannableStringBuilder использует дерево интервалов.

Если провести тесты на скорость отрисовки текста в зависимости от количества span’ов, то будут такие результаты: при использовании в строке до

Проверка на наличие span’а в тексте

Периодически возникает задача проверить, есть ли в spanned строке определенный span. И на Stackoverflow можно встретить такой код:

Такое решение будет работать, но оно неэффективно: придется пройти по всем span’ам, проверить, относится ли каждый из них к переданному типу, собрать результат в массив и в конце всего лишь проверить, что массив не пустой.

Более эффективным решением будет использование метода nextSpanTransition() :

Разметка текста в различных языковых ресурсах

Может возникнуть такая задача, когда требуется выделить при помощи разметки определенное слово в различных строковых ресурсах. Например, нам надо выделить слово “text” в английской версии и “texto” в испанской:

Если требуется что-то простое, например, выделить слово жирным, то можно использовать обычные html-теги ( ). В UI надо будет просто установить строковый ресурс в TextView:

Добавим тег и определим для него ключ “font” и значение – тип шрифта, который мы хотим использовать – “title_emphasis”:

Вытащим строку из ресурсов, найдем аннотации с ключом “font” и расставим span’ы:

Как текст располагается в TextView

TextView умеет отображать не только текст, но и картинки. Также можно задавать различные отступы перед текстом. Под капотом это работает так, что TextView создает дочерний класс Layout, ответственный непосредственно за отображение текста. Это абстрактный класс, который имеет три реализации, напрямую с ними обычно не приходится работать, если не писать свой элемент управления:

У Layout есть много методов, которые позволяют узнать различные параметры отображаемого текста: координаты строк, baseline, координаты начала и конца текста в строке и т.д. (подробнее можно посмотреть в документации)

Такие методы могут быть очень полезны. Например, некоторые разработчики сталкиваются с задачей выделения части текста в прямоугольники с закругленными углами, и пытаются искать ее решение через span’ы, которые не применимы в решении этой проблемы.

Зато на помощь могут прийти методы класса Layout. Вот примерное решение:

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

Затем создаем 4 drawable ресурса для всех случаев переноса текста, который должен быть заключен в прямоугольники:

Далее находим нужные нам аннотации в тексте, как это описывалось выше. Теперь у нас есть индексы начала и конца такой аннотации. Через методы Layout можно узнать номер строки, на которой начинается проаннотированный текст, и на которой заканчивается:

Далее придется нарисовать один или несколько прямоугольников. Рассмотрим простой случай, когда проаннотированная часть текста оказалась на одной строке, тогда нам понадобится всего один прямоугольник с четырьмя закругленными углами. Определим его координаты и нарисуем:

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

Производительность TextView

Ускорение показа текста

В 2015 году разработчики Instagram ускорили показ комментариев к фотографиям, используя глобальный кэш. Идея была в том, чтобы виртуально рисовать текст до показа его на экране, таким образом “разогрев” системный кэш. Когда подходила очередь показа текста, пользователь видел его гораздо быстрее, так как текст уже был измерен и лежал в кэше.

Начиная с Android P (28) разработчики Google добавили в API возможность выполнить фазу измерения размера текста заранее в фоновом потоке – PrecomputedText (и бэкпорт для API начиная с Android I (14) — PrecomputedTextCompat ). С использованием нового API в фоновом потоке будет выполнено 90% работы.

Показ большого текста

Если надо показать большой текст, то не стоит его сразу передавать в TextView. Иначе приложение может перестать плавно работать или вовсе начать зависать, так как будет делать много работы на главном потоке, чтобы показать огромный текст, который пользователь, возможно, даже и не прокрутит до конца. Решением будет разбиение текста на части (например, параграфы) и показ отдельных частей в RecyclerView. Для еще большего ускорения можно заранее рассчитывать размер блоков текста, используя PrecomputedText.

Для облегчения встраивания PrecomputedText в RecyclerView разработчики Google сделали специальные методы PrecomputedTextCompat.getTextFuture() и AppCompatTextView.setTextFuture() :

Так как RecyclerView во время скролла создает новые элементы, которые еще не видны пользователю, то такое решение будет иметь достаточно времени для выполнения работы в фоне до того, как элемент будет показан пользователю.

Что нужно знать, когда устанавливаешь текст в TextView

При вызове метода TextView.setText() на самом деле внутри создается копия строки:

То есть если установить текст со span’ами в TextView, а затем попытаться изменить переданный в setText() объект, то в отображении ничего не произойдет.

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

Разработчики Google советуют использовать это решение для отображения текста со span’ами в RecyclerView, чтобы уменьшить потребление ресурсов нашим приложением.

Использование autoLink

Так как это происходит на UI потоке, то не стоит использовать autoLink=”web” внутри элементов RecyclerView. В таком случае лучше вынести определение ссылок в фоновый поток. И здесь на помощь нам приходит класс LinkifyCompat :

У autoLink еще есть возможность указать значение map – распознавание почтовых адресов (оно же будет включено при значении all ). Эту возможность лучше вообще никогда не использовать. Проблема в том, что под капотом там будет создание экземпляра WebView, через который будет осуществляться поиск адреса! В исходном коде SDK в методе Linkify.gatherMapLinks() можно увидеть такую строку, этот код выполняется на главном потоке:

А внутри WebView стоит TODO от разработчиков SDK:

Но что же тогда использовать? Решением будет новая технология Smart Linkify, к сожалению доступная только начиная с Android P (28), которая работает на основе нейронных сетей и распознает различную информацию, в том числе и почтовые адреса. Вот небольшой пример использования:

В отличие старого Linkify, распознанные адреса не будут простыми ссылками. Над адресами при нажатии будет отображаться контекстный toolbar с возможными действиями, например показ адреса на Google карте.

Технология Smart Linkify способна распознавать различные данные: номера телефонов, авиарейсы и многое другое.

Magnifier

Начиная с Android P (28), появился новый элемент управления – Magnifier, который показывает увеличенные символы при выделении текста. С его помощью пользователю гораздо проще установить курсор на нужную позицию.

По умолчанию он работает в TextView, EditText и WebView, но при желании его можно использовать при написании своих элементов пользовательского интерфейса: его API достаточно прост.

Заключение

В данной статье были опущены многие нововведения последних версий Android и смежные темы, заслуживающие отдельных статей, например:

Если кому-то интересна одна из этих тем, рекомендую посмотреть презентацию с прошедшего Google I/O’19 “Best Practices for Using Text in Android”.

Источник

Читайте также:  что значит манескин на итальянском
Строительный портал