Преобразование текста: эквивалент верхнего регистра в Android?

#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»