#android
#Android
Вопрос:
Существует ли это? Мне нужно создать TextView, который всегда будет в верхнем регистре.
Ответ №1:
Попробуйте это:
<TextView
android:textAllCaps="true"
/>
Комментарии:
1.
android:textAllCaps
работает, только если ваш minSdkVersion >= 14 (сэндвич с мороженым)2. Я знаю, что это для комментария более чем трехлетней давности, но это работает, только если вы используете экранную клавиатуру — если у кого-то есть физическая клавиатура (Bluetooth или на устройстве), то она игнорируется, лучше использовать прослушиватель
Ответ №2:
Я не вижу ничего подобного в атрибутах TextView. Однако вы могли бы просто сделать текст заглавным, прежде чем устанавливать его:
textView.setText(text.toUpperCase());
Если TextView является EditText, и вы хотите, чтобы все пользовательские типы были заглавными, вы могли бы реализовать TextWatcher и использовать EditText addTextChangedListener для добавления его, а в методе onTextChange принять пользовательский ввод и заменить его тем же текстом в верхнем регистре.
editText.addTextChangedListener(upperCaseTextWatcher);
final TextWatcher upperCaseTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
editText.setText(editText.getText().toString().toUpperCase());
editText.setSelection(editText.getText().toString().length());
}
public void afterTextChanged(Editable editable) {
}
};
Комментарии:
1. Это работает, если
text
является строкой. Если вы получаете строку из ваших xml-файлов с помощьюR.string.someID
, то вам нужно будет вызватьResources.getString
call ( developer.android.com/reference/android/content/res /… )2. Я боялся, что мне придется сделать это таким образом. Надеялся, что будет простой атрибут, которого мне не хватало.
3. Не приведет ли это к созданию StackOverflow?
4. Этот ответ неверен. Пожалуйста, обратитесь к ответу Ларса: вы можете сделать это с помощью
textAllCaps
атрибута.5. Вызов
editText.setText()
внутри прослушивателя TextChanged вызовет бесконечный цикл. По крайней мере, для меня это сработало без удаления и повторного добавления TextWatcher.
Ответ №3:
Для редактирования текста вы можете использовать InputFilter.AllCaps как фильтр
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
Смотрите:
http://d.android.com/reference/android/text/InputFilter .AllCaps.html
Также вы можете указать свой редактируемый текст через android:inputType
:
<EditText
...
android:inputType="textCapCharacters" />
Комментарии:
1. фильтр сработал отлично, большое спасибо. однако я бы не рекомендовал использовать inputType «textCapCharacters», поскольку он устарел.
2. @Raykud где ты видел, что это
textCapCharacters
устарело?3. я знаю, что комментирую очень поздно, но как только все символы будут написаны заглавными буквами, появится ли что-то вроде этого InputFilter . Все маленькие символы?
Ответ №4:
использовать
android:textAllCaps="true"
это сделает весь ваш Textview
капитал.
Ответ №5:
Вы могли бы это сделать, только добавив TYPE_TEXT_FLAG_CAP_CHARACTERS в inputType::
editText.setInputType(android.text.InputType.TYPE_CLASS_TEXT
android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
Надеюсь, вам помогут!
Ответ №6:
Я нашел это в руководстве для разработчиков Android:
<TextView
...
android:capitalize="characters"
...
/>
Комментарии:
1. Это относится только к EditText, а не к TextView. Из документации: «[…] автоматически использовать заглавные буквы для ввода пользователем»
2. Реальный ответ?? ага…. «android: capitalize устарел: вместо этого используйте inputType»