Заглавная буква для EditText
Я работаю над небольшим личным списком задач, и до сих пор все работало довольно хорошо. Есть одна небольшая странность, которую я хотел бы выяснить. Всякий раз, когда я иду, чтобы добавить новый элемент, у меня есть диалог с представлением EditText, показывающим внутри. Когда я выбираю представление EditText, клавиатура подходит для ввода текста, как и должно быть. В большинстве приложений, по умолчанию, кажется, что клавиша Shift удерживается для первой буквы... хотя это не делает это для моего взгляда. Должен быть простой способ исправить, но я неоднократно искал ссылку и не могу ее найти. Я думаю, что должен быть атрибут xml для ссылки, загруженной адаптером, но я не могу выяснить, что это такое.
11 ответов
Статически (т.е. в вашем XML-файле макета): установить android:inputType="textCapSentences"
на ваше EditText
,
Программно: вы должны включить InputType.TYPE_CLASS_TEXT
в InputType
из EditText
например,
EditText editor = new EditText(this);
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
Можно комбинировать с текстом и его вариациями, чтобы запросить заглавные буквы первого символа каждого предложения.
Просто используйте android:inputType="textCapWords"
в вашем элементе EditText.
Например:
<EditText
android:id="@+id/txtName"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="0.7"
android:inputType="textCapWords"
android:textColorHint="#aaa"
android:hint="Name Surname"
android:textSize="12sp" />
Обратитесь к следующей ссылке для справки: http://developer.android.com/reference/android/widget/TextView.html
Примените следующую строку в вашем EditText в XML.
android:inputType="textCapSentences|textMultiLine"
Это также позволит многострочную поддержку.
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
или же android:inputType="textCapSentences"
будет работать только при включенной настройке Auto Capitalize клавиатуры вашего устройства.
Я столкнулся с той же проблемой, просто поделился тем, что узнал. Может помочь вам и другим...
Попробуйте это на вашем layout.add строку ниже в вашем EditText
,
android:inputType="textCapWords|textCapSentences"
хорошо работает на меня.. надеюсь, это работает и на вас...
Если вы хотите, чтобы первая буква в каждом слове была заглавной, используйте android:inputType="textCapWords"
Для лучшего понимания
<EditText
android:id="@+id/edt_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"/>
И если вы используете заглавное слово в каждом предложении, используйте его.android:inputType="textCapSentences"
эта строка в вашем xml. Я имею ввиду в вашем EditText.
Для лучшего понимания
<EditText
android:id="@+id/edt_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"/>
Чтобы извлечь выгоду из текста редактирования, вы можете сделать следующее:
Сделать заглавными буквами каждое слово:
android:inputType="textCapWords"
Чтобы сделать заглавную букву каждого предложения:
android:inputType="textCapSentences"
Чтобы каждая буква была заглавной:
android:inputType="textCapCharacters"
Но это только внесет изменения в клавиатуру, и пользователь может изменить режим, чтобы написать письмо в маленьком случае.
Так что этот подход не очень ценится, если вы действительно хотите данные в формате с заглавной буквы, добавьте следующий класс:
public class CapitalizeFirstLetter {
public static String capitaliseName(String name) {
String collect[] = name.split(" ");
String returnName = "";
for (int i = 0; i < collect.length; i++) {
collect[i] = collect[i].trim().toLowerCase();
if (collect[i].isEmpty() == false) {
returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
}
}
return returnName.trim();
}
public static String capitaliseOnlyFirstLetter(String data)
{
return data.substring(0,1).toUpperCase()+data.substring(1);
}
}
А потом,
Теперь, чтобы сделать каждое слово заглавным:
CapitalizeFirstLetter.capitaliseName(name);
Прописать только первое слово:
CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);
Для ввода заглавных букв в EditText вы можете выбрать два следующих типа ввода:
- андроид:inputType="textCapSentences"
- андроид: inputType = "textCapWords"
textCapSentences
Это позволит первой букве первого слова в качестве заглавной в каждом предложении.
textCapWords Это позволит первой букве каждого слова в качестве заглавной.
Если вы хотите, чтобы оба атрибута просто использовали | подписать с обоими атрибутами
android:inputType="textCapSentences|textCapWords"
В вашем макете XML-файл:
задавать
android:inputType="textCapSentences"
На ваше
EditText
иметь первый алфавит первого слова каждого предложения в качестве заглавнойИли же
android:inputType="textCapWords"
на вашем EditText иметь первый алфавит каждого слова в качестве заглавной
Я могу заверить вас, что оба ответа начнут с заглавной буквы и не будут содержать строку с правкой.
Если вы хотите сделать это в XMl ниже код
android:inputType="textCapWords|textCapSentences"
Если вы хотите сделать это в деятельности / фрагмент и т. Д. Ниже код
momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)
PS: Если у вас нет другого свойства, вы также можете легко добавить его с "|" символ, просто убедитесь, что в свойствах атрибута xml нет пробела
используйте этот код, чтобы использовать только заглавные буквы для EditText
MainActivity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:tag="true">
</EditText>
</RelativeLayout>
MainActivity.java
EditText et = findViewById(R.id.et);
et.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
{
if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
{
et.setTag("false");
et.setText(et.getText().toString().toUpperCase());
et.setSelection(et.getText().toString().length());
}
if(et.getText().toString().length() == 0)
{
et.setTag("true");
}
}
public void afterTextChanged(Editable editable) {
}
});
Попробуйте этот код, он будет использовать первый символ всех слов.
- установить addTextChangedListener для представления EditText
edt_text.addTextChangedListener(наблюдающий);
- Добавить TextWatcher
TextWatcher watcher = 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 if (input.length() > 1 && input.contains(" ")) {
String fstr = input.substring(0, input.lastIndexOf(" ") + 1);
if (fstr.length() == input.length()) {
capitalizedText = fstr;
} else {
String sstr = input.substring(input.lastIndexOf(" ") + 1);
sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
capitalizedText = fstr + sstr;
}
} else
capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);
if (!capitalizedText.equals(edt_text.getText().toString())) {
edt_text.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) {
edt_text.setSelection(mStart);
edt_text.removeTextChangedListener(this);
}
});
edt_text.setText(capitalizedText);
}
}
};
Установите тип ввода в XML, а также в файле JAVA, как это,
В XML
андроид:inputType="textMultiLine|textCapSentences"
Это также позволит многострочно и в файле JAVA,
edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
Убедитесь, что параметр Auto-Capitalization вашей клавиатуры включен.
Я основал и мое решение: у вас есть 2 способа решить его в Java:
testEditText.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS);
и xml:
<EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />
Программный
TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);
Раньше это было android:capitalize="words"
, который сейчас устарел. Рекомендуемая альтернатива заключается в использовании android:inputType="textCapWords"
Обратите внимание, что это будет работать только в том случае, если на вашем устройстве включена функция Auto Capitalize.
Чтобы сделать это программно, используйте следующий метод:
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
Если вы пишете стили в styles.xml, тогда
удалить свойство android:inputType и добавить строки ниже
<item name="android:capitalize">words</item>