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!

Allen Gingrich
źródło
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()

Cheryl Simon
źródło
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()));
Beto Caldas
źródło
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();
noloman
źródło
20

dla Kotlina, po prostu zadzwoń

textview.text = string.capitalize()
Ben Kax
źródło
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.

Hiren Patel
źródło
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;
}
Sidharth V
źródło
2

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

myString.toLowerCase(Locale.getDefault()).capitalize()
VinceMedi
źródło
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);
    }
}
Shrini Jaiswal
źródło
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"
Asad Ali Choudhry
źródło