Я хотел бы иметь возможность назначить атрибут или стиль xml для объекта, TextView
который будет делать любой текст, который он имеет во ВСЕХ ЗАГЛАВНЫХ БУКВАХ.
Атрибуты android:inputType="textCapCharacters"
и android:capitalize="characters"
ничего не делают и выглядят так, как будто они предназначены для пользовательского текста, а не для TextView
.
Я хотел бы сделать это, чтобы я мог отделить стиль от содержания. Я знаю, что могу сделать это программно, но опять же, я хочу сохранить стиль вне содержимого и кода.
android
textview
capitalization
cottonBallPaws
источник
источник
Ответы:
Хотя это была довольно разумная просьба, но похоже, что вы не можете сделать это в настоящее время. Что за полный провал. ржунимагу
Обновить
Теперь вы можете использовать textAllCaps, чтобы форсировать все заглавные буквы.
источник
textAllCaps
вызывает приложение сбой, если вы указалиandroid:fontFamily
вthemes.xml
.А как насчет Android: textAllCaps ?
источник
Используя AppCompat
textAllCaps
в приложениях для Android, поддерживающих более старые API (менее 14)Существует один виджет пользовательского интерфейса, который поставляется вместе с AppCompat. Он называется CompatTextView. Это пользовательское расширение TextView, которое добавляет поддержку textAllCaps.
Для более нового Android API> 14 вы можете использовать:
Простой пример:
Источник: developer.android
Обновить:
источник
CompatTextView
используется вScrollingTabCointainerView
котором используетсяToolbarWidgetWrapper
, что звучит довольно ново и пока имя держит «v7» в своем названии, это достаточно хорошая гарантия для меня, чтоCompatTextView
он останется там, где он есть.CompatTextView
был замененAppCompatTextView
в последней библиотеке appcompat-v7. Вы были совершенно правы.Это действительно очень разочаровывает, что вы не можете сделать это с помощью styles (
<item name="android:textAllCaps">true</item>
) или для каждого XML-файла макета с атрибутом textAllCaps , и единственный способ сделать это - на самом деле использовать theString.toUpperCase () для каждой из строк, когда вы делаете textViewXXX.setText (theString).В моем случае я не хотел, чтобы везде в моем коде был метод theString.toUpperCase (), но имелось централизованное место для этого, потому что у меня были некоторые действия и списки макетов элементов с TextViews, которые должны быть написаны с заглавной буквы все время (a title) и другие, которые этого не сделали ... так что ... некоторые люди могут подумать, что это излишнее, но я создал свой собственный класс CapitalizedTextView, расширяющий android.widget.TextView, и переопределил метод setText, пишущий заглавные буквы на лету.
По крайней мере, если дизайн изменится или мне нужно удалить заглавные буквы в будущих версиях, мне просто нужно перейти на обычный TextView в файлах макета.
Теперь, примите во внимание, что я сделал это, потому что Дизайнер приложения действительно хотел, чтобы этот текст (заголовки) был в CAPS по всему приложению независимо от капитализации исходного содержимого, а также у меня были другие обычные TextView, где капитализация шла с фактическим содержимым. ,
Это класс:
И всякий раз, когда вам нужно его использовать, просто объявите его со всем пакетом в макете XML:
Некоторые утверждают, что правильный способ стилизации текста в TextView - это использование SpannableString , но я думаю, что это будет еще большим излишним, не говоря уже о том, что он потребляет больше ресурсов, потому что вы будете создавать экземпляр другого класса, чем TextView.
источник
Я придумал решение, похожее на RacZo, в том, что я также создал подкласс,
TextView
который обрабатывает текст в верхнем регистре.Разница заключается в том, что вместо переопределения одного из
setText()
методов я использовал подход, аналогичный тому, что наTextView
самом деле делает API 14+ (что, на мой взгляд, является более чистым решением).Если вы посмотрите на источник , вы увидите реализацию
setAllCaps()
:AllCapsTransformationMethod
Класс не является ( в настоящее время) общественности, но тем не менее, источник также доступен . Я немного упростил этот класс (убралsetLengthChangesAllowed()
метод), поэтому полное решение таково:источник
Кажется, что есть разрешение на настройку мобильной клавиатуры, поэтому самый простой способ сделать это:
надеюсь это сработает
источник
Проект PixlUI позволяет использовать textAllCaps в любом текстовом представлении или подклассе текстового представления, в том числе: Button, EditText AutoCompleteEditText, флажок RadioButton и несколько других.
Вам нужно будет создать свои текстовые представления, используя версию pixlui, а не из Android-источника, что означает, что вы должны сделать это:
PixlUI также позволяет вам установить пользовательский шрифт / шрифт, который вы поместите в вашу папку ресурсов.
Я работаю над вилкой Gradle платформы PixlUI, которая использует gradle и позволяет указывать textAllCaps, а также гарнитуру из стилей, вместо того, чтобы требовать их встраивания, как это делает исходный проект.
источник