Come rendere maiuscola la prima lettera di testo in un TextView in un'applicazione Android


89

Non mi riferisco neanche a textInput. Voglio dire che una volta che hai un testo statico in un TextView (popolato da una chiamata al database ai dati immessi dall'utente (che potrebbero non essere in maiuscolo)), come posso assicurarmi che siano in maiuscolo?

Grazie!


2
Per i futuri visitatori ... A Kotlin basta usare "abcd" .capitalize ())
Amit Tumkur

Risposte:


181

Dovrei essere in grado di farlo attraverso la manipolazione di stringhe java standard, niente di specifico per Android o TextView.

Qualcosa di simile a:

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

Sebbene ci siano probabilmente un milione di modi per farlo. Vedere la documentazione di String .

MODIFICATO Ho aggiunto il file.toLowerCase()


12
Volevo solo notare che questa è una buona soluzione per l'inglese, ma non adatta alla localizzazione.
Billy Lazzaro

70

Quanto segue non si applica a TextView, ma funziona con EditText; anche allora, si applica al testo inserito dalla tastiera, non al testo caricato con setText (). Per essere più precisi, attiva le maiuscole nella tastiera e l'utente può sovrascriverla a suo piacimento.

android:inputType="textCapSentences"

o

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Questo coprirà la prima lettera.

o

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

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

79
Ciò non si applica a TextView, ma solo a EditText; anche allora, si applica al testo inserito dalla tastiera, non al testo caricato con setText (). Per essere più precisi, attiva le maiuscole nella tastiera e l'utente può sovrascriverla a suo piacimento.
Alex Cohn

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

20

per Kotlin, chiama

textview.text = string.capitalize()

3
Avrei pensato che avrebbe scritto in maiuscolo ogni parola, ma funziona solo per la prima parola.
Skoua

Se lo stai utilizzando nell'app multilingue, passare la lingua lo rende migliore.
Dharmendra Pratap Singh,



2

Per me nessuno funziona:

Funzione:

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

Risultato:

Cervello I / P brain O / P

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

Da I ​​/ P brain And health a O / P Brain And Health

Da I ​​/ P brain's Health a O / P Brain's Health

Da I ​​/ P brain's Health and leg a O / P Brain's Health And Leg

Spero che questo ti possa aiutare.


2

La risposta accettata è buona, ma se la stai usando per ottenere valori da un textView in Android, sarebbe bene controllare se la stringa è vuota. Se la stringa è vuota, verrà generata un'eccezione.

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

2

Per Kotlin, se vuoi essere sicuro che il formato sia "Aaaaaaaaa" puoi usare:

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

1

Crea un TextView personalizzato e usalo:

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

come faccio a visualizzare questo CustomTextView in Design of Activity / Fragments come elemento dell'interfaccia utente drag and drop?
Kostanos

0

Qui ho scritto un articolo dettagliato sull'argomento, poiché abbiamo diverse opzioni, Capitalize First Letter of String in Android

Metodo per scrivere in maiuscolo la prima lettera di stringa 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;
}

Metodo per scrivere in maiuscolo la prima lettera di stringa 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
}

Utilizzo dell'attributo XML

Oppure puoi impostare questo attributo in TextView o EditText in XML

android:inputType="textCapSentences"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.