У мене є, EditTextі мені потрібно, щоб текст у ньому (коли користувач вводить текст) починався з великої літери.
Відповіді:
Будьте обережні, якщо додасте обидва android:capitalize="sentences"і android:inputType="text", оскільки останні, здається, мають пріоритет над першими, і введення не буде написано великими літерами.
Існує специфіка inputTypeдля автоматичного написання великої літери першої літери:
android:inputType="textCapSentences"
Див. Http://developer.android.com/reference/android/widget/TextView.html#attr_android:inputType
android:inputType="textMultiLine|textCapSentences"
Варіанти для android: використовувати великі літери є
android:inputType="none", which won't automatically capitalize anything.
android:inputType="sentences", Which will capitalize the first word of each sentence.
android:inputType="words", Which Will Capitalize The First Letter Of Every Word.
android:inputType="characters", WHICH WILL CAPITALIZE EVERY CHARACTER.
Очевидно, його замінено на inputTypeзамістьcapitalize
Використовуйте
android:inputType="textPersonName|textCapWords"
оскільки використання лише "textPersonName"недостатньо, тому перші літери імені будуть написані великими літерами.
Подібно до поштових адрес:
android:inputType="textPostalAddress|textCapSentences"
Спробуйте таким чином,
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
або android:inputType="textCapSentences"працюватиме лише в тому випадку, якщо на клавіатурі пристрою ввімкнено функцію автоматичного використання великих літер .
Ви вжили слово "Примусити". Тож спробуйте це. Просто передайте ваш edittext як аргумент.
public static void setCapitalizeTextWatcher(final EditText editText) {
final TextWatcher textWatcher = new TextWatcher() {
int mStart = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mStart = start + count;
}
@Override
public void afterTextChanged(Editable s) {
String input = s.toString();
String capitalizedText;
if (input.length() < 1)
capitalizedText = input;
else
capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);
if (!capitalizedText.equals(editText.getText().toString())) {
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
editText.setSelection(mStart);
editText.removeTextChangedListener(this);
}
});
editText.setText(capitalizedText);
}
}
};
editText.addTextChangedListener(textWatcher);
}
У макеті xml додайте android:capitalize="sentences"
У випадку пароля, який починається з верхнього регістру, це буде:
android:inputType="textPassword|textCapSentences"
edittext.setFilters(new InputFilter[] {new InputFilter.AllCaps()});