Як писати велику літеру в тексті в TextView у додатку Android


89

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

Дякую!


2
Для майбутніх відвідувачів ... У Котліні просто використовуйте "abcd" .capitalize ())
Аміт Тумкур

Відповіді:


181

Я мав би змогу досягти цього за допомогою стандартної маніпуляції рядками Java, нічого конкретного для Android чи TextView.

Щось на зразок:

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

Хоча існує, мабуть, мільйон способів досягти цього. Див. Документацію до рядка .

ЗМЕНЕНО Я додав.toLowerCase()


13
Просто хотів зазначити, що це хороше рішення для англійської мови, але не зручне для локалізації.
Біллі Лаццаро,

70

Далі не стосується TextView, але працює з EditText; навіть тоді це стосується тексту, введеного з клавіатури, а не тексту, завантаженого за допомогою setText (). Якщо бути більш точним, він включає Caps на клавіатурі, і користувач може змінити це за власним бажанням.

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 (). Якщо бути більш точним, він включає Caps на клавіатурі, і користувач може змінити це за власним бажанням.
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
Я б міг подумати, що це буде писати великі літери кожного слова, але це справді працює лише для першого слова.
Skoua

Якщо ви використовуєте це в багатомовній програмі, передача мови робить це кращим.
Дхармендра Пратап Сінгх,



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.