Заглавная буква для EditText - PullRequest
352 голосов
/ 26 января 2011

Я работаю над небольшим приложением со списком задач, и пока все работает довольно хорошо.Есть одна небольшая странность, которую я хотел бы выяснить.Всякий раз, когда я иду, чтобы добавить новый элемент, у меня есть диалог с представлением EditText, показывающим внутри.Когда я выбираю представление EditText, клавиатура подходит для ввода текста, как и должно быть.В большинстве приложений, по умолчанию кажется, что клавиша Shift удерживается для первой буквы ... хотя это не делает это для моего взгляда.Должен быть простой способ исправить, но я неоднократно искал ссылку и не могу ее найти.Я думаю, что должен быть атрибут xml для ссылки, загруженной адаптером, но я не могу выяснить, что это такое.

Ответы [ 15 ]

1 голос
/ 29 декабря 2016

Попробуйте этот код, он будет использовать заглавные буквы всех слов.

- установить 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);
        }
    }
};
0 голосов
/ 09 мая 2019

Чтобы использовать заглавные буквы, вы можете сделать следующее с текстом редактирования:

Чтобы сделать заглавную букву каждого слова :

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);
0 голосов
/ 28 марта 2019

Программно

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);
0 голосов
/ 03 января 2019

я основал и мое решение: у вас есть 2 способа решить это в яве:

 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" />
0 голосов
/ 27 июня 2017

Раньше это было android:capitalize="words", что сейчас устарело.Рекомендуемая альтернатива - использовать android:inputType="textCapWords"

Обратите внимание, что это будет работать только в том случае, если включена функция автоматической установки заглавных букв на клавиатуре устройства.

Чтобы сделать это программно, используйте следующий метод:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...