Как использовать первую букву текста в TextView в приложении для Android


89

Я тоже не имею в виду textInput. Я имею в виду, что если у вас есть статический текст в TextView (заполненный из вызова базы данных для данных, введенных пользователем (которые могут быть не с заглавной буквы)), как я могу убедиться, что они написаны с заглавной буквы?

Благодарность!


2
Для будущих посетителей ... В Котлине просто используйте "abcd" .capitalize ())
Амит Тумкур

Ответы:


181

Я должен быть в состоянии сделать это с помощью стандартных манипуляций со строкой Java, ничего особенного для Android или TextView.

Что-то типа:

String upperString = myString.substring(0, 1).toUpperCase() + myString.substring(1).toLowerCase();

Хотя, наверное, есть миллион способов добиться этого. См. Документацию String .

ИЗМЕНИТЬ Я добавил.toLowerCase()


12
Сразу хотел отметить, что это хорошее решение для английского, но не дружелюбное к локализации.
Билли Лаззаро

70

Следующее не относится к TextView, но работает с EditText; даже в этом случае он применяется к тексту, введенному с клавиатуры, а не к тексту, загруженному с помощью setText (). Чтобы быть более конкретным, он включает заглавные буквы на клавиатуре, и пользователь может отменить это по своему желанию.

android:inputType="textCapSentences"

или

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Это закроет первую букву.

или

compile 'org.apache.commons:commons-lang3:3.4' //in build.gradle module(app)

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));

79
Это не относится к TextView, а только к EditText; даже в этом случае он применяется к тексту, введенному с клавиатуры, а не к тексту, загруженному с помощью setText (). Чтобы быть более конкретным, он включает заглавные буквы на клавиатуре, и пользователь может отменить это по своему желанию.
Alex Cohn

28
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();

20

для Котлина, просто позвоните

textview.text = string.capitalize()

3
Я бы подумал, что каждое слово будет писать с заглавной буквы, но он действительно работает только для первого слова.
Скуа,

Если вы используете это в многоязычном приложении, передача языкового стандарта сделает это лучше.
Дхармендра Пратап Сингх,



2

У меня ничего не работает:

Функция:

private String getCapsSentences(String tagName) {
    String[] splits = tagName.toLowerCase().split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < splits.length; i++) {
        String eachWord = splits[i];
        if (i > 0 && eachWord.length() > 0) {
            sb.append(" ");
        }
        String cap = eachWord.substring(0, 1).toUpperCase() 
                + eachWord.substring(1);
        sb.append(cap);
    }
    return sb.toString();
}

Результат:

I / P brain O / P мозг

I / P Brain and Health O / P Brain And Health

I / P brain And health в O / P Brain And Health

I / P brain's Health в O / P Brain's Health

I / P brain's Health and leg в O / P Brain's Health And Leg

Надеюсь, это поможет вам.


2

Принятый ответ хорош, но если вы используете его для получения значений из textView в android, было бы хорошо проверить, пуста ли строка. Если строка пуста, это вызовет исключение.

private String capitizeString(String name){
    String captilizedString="";
    if(!name.trim().equals("")){
       captilizedString = name.substring(0,1).toUpperCase() + name.substring(1);
    }
    return captilizedString;
}

2

Для Kotlin, если вы хотите быть уверены, что используется формат «Aaaaaaaaa», вы можете использовать:

myString.toLowerCase(Locale.getDefault()).capitalize()

1

Создайте собственный TextView и используйте его:

public class CustomTextView extends TextView {

    public CapitalizedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        if (text.length() > 0) {
            text = String.valueOf(text.charAt(0)).toUpperCase() + text.subSequence(1, text.length());
        }
        super.setText(text, type);
    }
}

как сделать так, чтобы этот CustomTextView отображался в Design of Activity / Fragments как перетаскиваемый элемент пользовательского интерфейса?
Костанос

0

Здесь я написал подробную статью по этой теме, так как у нас есть несколько вариантов: Заглавная первая буква строки в Android

Метод использования заглавной буквы в строке в Java

public static String capitalizeString(String str) {
        String retStr = str;
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
        }catch (Exception e){}
        return retStr;
}

Метод написания заглавной буквы в первой строке в Котлине

fun capitalizeString(str: String): String {
        var retStr = str
        try { // We can face index out of bound exception if the string is null
            retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
        } catch (e: Exception) {
        }
        return retStr
}

Использование атрибута XML

Или вы можете установить этот атрибут в TextView или EditText в XML

android:inputType="textCapSentences"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.