Jak zamienić pierwszą literę tekstu wielką literą w TextView w aplikacji na Androida


89

Nie mówię też o textInput. Chodzi mi o to, że skoro masz tekst statyczny w TextView (wypełniony z wywołania bazy danych do danych wprowadzonych przez użytkownika (które mogą nie być wielkimi literami)), jak mogę się upewnić, że są one pisane wielkimi literami?

Dzięki!


2
Dla przyszłych gości ... W Kotlinie po prostu użyj "abcd" .capitalize ())
Amit Tumkur

Odpowiedzi:


181

Powinienem być w stanie to osiągnąć za pomocą standardowej manipulacji ciągami Java, nic specyficznego dla Androida lub TextView.

Coś jak:

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

Chociaż prawdopodobnie istnieje milion sposobów na osiągnięcie tego. Zobacz dokumentację String .

EDYTOWANO Dodałem.toLowerCase()


12
Chciałem tylko zauważyć, że jest to dobre rozwiązanie dla języka angielskiego, ale nie jest przyjazne dla lokalizacji.
Billy Lazzaro

70

Poniższe nie dotyczy TextView, ale działa z EditText; nawet wtedy dotyczy to tekstu wprowadzonego z klawiatury, a nie tekstu ładowanego za pomocą funkcji setText (). Mówiąc dokładniej, włącza Caps na klawiaturze, a użytkownik może to zmienić według własnego uznania.

android:inputType="textCapSentences"

lub

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

To będzie CAP pierwsza litera.

lub

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

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

79
Nie dotyczy to TextView, ale tylko EditText; nawet wtedy dotyczy to tekstu wprowadzanego z klawiatury, a nie tekstu ładowanego za pomocą metody setText (). Mówiąc dokładniej, włącza Caps na klawiaturze, a użytkownik może to zmienić według własnego uznania.
Alex Cohn

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

20

dla Kotlina, po prostu zadzwoń

textview.text = string.capitalize()

3
Myślałem, że każde słowo będzie pisane wielką literą, ale tak naprawdę działa tylko dla pierwszego słowa.
Skoua

Jeśli używasz tego w wielojęzycznej aplikacji, przekazywanie ustawień regionalnych sprawia, że ​​jest lepiej.
Dharmendra Pratap Singh



2

U mnie nic nie działa:

Funkcjonować:

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();
}

Wynik:

Mózg I / P brain O / P

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

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

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

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

Mam nadzieję, że to ci pomoże.


2

Zaakceptowana odpowiedź jest dobra, ale jeśli używasz jej do pobierania wartości z textView w systemie Android, dobrze byłoby sprawdzić, czy ciąg jest pusty. Jeśli ciąg jest pusty, zgłosi wyjątek.

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

2

W przypadku Kotlina, jeśli chcesz mieć pewność, że format to „Aaaaaaaaa”, możesz użyć:

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

1

Utwórz niestandardowy TextView i użyj go:

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);
    }
}

jak sprawić, aby ten CustomTextView był wyświetlany w projekcie działania / fragmentów jako element interfejsu użytkownika typu „przeciągnij i upuść”?
Kostanos

0

Tutaj napisałem szczegółowy artykuł na ten temat, ponieważ mamy kilka opcji, Capitalize First Letter of String w Androidzie

Metoda zamieniania pierwszej litery ciągu na wielką literę w języku 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;
}

Metoda kapitalizacji pierwszej litery ciągu w Kotlinie

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
}

Korzystanie z atrybutu XML

Lub możesz ustawić ten atrybut w TextView lub EditText w XML

android:inputType="textCapSentences"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.