So schreiben Sie den ersten Textbuchstaben in einer Textansicht in einer Android-Anwendung in Großbuchstaben

88

Ich beziehe mich auch nicht auf textInput. Ich meine, wenn Sie statischen Text in einer Textansicht haben (ausgefüllt von einem Datenbankaufruf an vom Benutzer eingegebene Daten (die möglicherweise nicht groß geschrieben werden)), wie kann ich sicherstellen, dass sie groß geschrieben werden?

Vielen Dank!

Allen Gingrich
quelle
2
Für zukünftige Besucher ... In Kotlin verwenden Sie einfach "abcd" .capitalize ())
Amit Tumkur

Antworten:

177

Ich sollte in der Lage sein, dies durch Standard-Java-String-Manipulation zu erreichen, nichts Android- oder TextView-spezifisches.

Etwas wie:

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

Obwohl es wahrscheinlich eine Million Möglichkeiten gibt, dies zu erreichen. Siehe String- Dokumentation.

EDITIERT Ich fügte hinzu.toLowerCase()

Cheryl Simon
quelle
12
Ich wollte nur beachten, dass dies eine gute Lösung für Englisch ist, aber nicht lokalisierungsfreundlich.
Billy Lazzaro
70

Das Folgende gilt nicht für TextView, funktioniert jedoch mit EditText. Selbst dann gilt dies für den über die Tastatur eingegebenen Text und nicht für den mit setText () geladenen Text. Genauer gesagt werden die Großbuchstaben auf der Tastatur aktiviert, und der Benutzer kann dies nach Belieben überschreiben.

android:inputType="textCapSentences"

oder

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Dies wird den ersten Buchstaben CAP.

oder

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

tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));
Beto Caldas
quelle
79
Dies gilt nicht für TextView, sondern nur für EditText. Selbst dann gilt dies für Text, der über die Tastatur eingegeben wurde, nicht für den mit setText () geladenen Text. Genauer gesagt werden die Großbuchstaben auf der Tastatur aktiviert, und der Benutzer kann dies nach Belieben überschreiben.
Alex Cohn
27
StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));  
return sb.toString();
Noloman
quelle
18

Für Kotlin rufen Sie einfach an

textview.text = string.capitalize()
Ben Kax
quelle
2
Ich hätte gedacht, es würde jedes Wort groß schreiben, aber es funktioniert tatsächlich nur für das erste Wort.
Skoua
Wenn Sie dies in der mehrsprachigen App verwenden, wird es durch Übergeben des Gebietsschemas besser.
Dharmendra Pratap Singh
2

Für mich funktioniert nichts:

Funktion:

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

Ergebnis:

I / P brain O / P Gehirn

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

I / P brain And health zu O / P. Brain And Health

I / P brain's Health zu O / P. Brain's Health

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

Hoffe das würde dir helfen.

Hiren Patel
quelle
2

Die akzeptierte Antwort ist gut, aber wenn Sie sie verwenden, um Werte aus einer Textansicht in Android abzurufen, ist es gut zu überprüfen, ob die Zeichenfolge leer ist. Wenn die Zeichenfolge leer ist, wird eine Ausnahme ausgelöst.

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

Wenn Sie für Kotlin sicher sein möchten, dass das Format "Aaaaaaaaa" ist, können Sie Folgendes verwenden:

myString.toLowerCase(Locale.getDefault()).capitalize()
VinceMedi
quelle
1

Bitte erstellen Sie eine benutzerdefinierte Textansicht und verwenden Sie diese:

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
quelle
Wie kann ich festlegen, dass diese CustomTextView im Design von Aktivitäten / Fragmenten als Drag & Drop-UI-Element angezeigt wird?
Kostanos
0

Hier habe ich einen ausführlichen Artikel zu diesem Thema geschrieben, da wir verschiedene Optionen haben : Großbuchstaben in Android großschreiben

Methode zum Großschreiben des ersten Buchstabenstrings in 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;
}

Methode zur Großschreibung des ersten Buchstabenstrings in Kotlin

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-Attribut verwenden

Oder Sie können dieses Attribut in TextView oder EditText in XML festlegen

android:inputType="textCapSentences"
Asad Ali Choudhry
quelle