Lettere maiuscole per EditText


383

Sto lavorando su una piccola app per todo list personale e finora tutto ha funzionato abbastanza bene. C'è una piccola stranezza che vorrei capire. Ogni volta che vado ad aggiungere un nuovo elemento, ho una finestra di dialogo con una vista EditText che mostra all'interno. Quando seleziono la vista EditText, viene visualizzata la tastiera per inserire il testo, come dovrebbe. Nella maggior parte delle applicazioni, l'impostazione predefinita sembra essere il tasto Maiusc per la prima lettera ... anche se non lo fa a mio avviso. Deve esserci un modo semplice per risolvere, ma ho cercato ripetutamente il riferimento e non riesco a trovarlo. Sto pensando che ci debba essere un attributo xml per il riferimento caricato dall'adapter, ma non riesco a scoprire di cosa si tratta.

Risposte:


805

Staticamente (cioè nel file XML del layout): impostare android:inputType="textCapSentences"su EditText.

Livello di programmazione: è necessario includere InputType.TYPE_CLASS_TEXTnel InputTypedel EditText, ad esempio,

EditText editor = new EditText(this); 
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

Può essere combinato con il testo e le sue variazioni per richiedere l'uso del maiuscolo del primo carattere di ogni frase.

- Documenti Google


5
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" funzionerà solo se l'impostazione di capitalizzazione automatica della tastiera del dispositivo è abilitata.
Lakshmanan,

8
Perché abilitando questo fa sì che my android:lines="7"non mostri più 7 righe (per impostazione predefinita torna a 1 riga)
James Wierzba,

3
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" funzionerà solo se l'impostazione di capitalizzazione automatica della tastiera del dispositivo è abilitata. Qual è l'alternativa per questo, a livello di programmazione?
Rapido

@JamesWierzba Mi riferirò qui alla risposta di Shivang come risposta per il supporto multilinea. Aggiungi android: inputType = "textCapSentences | textMultiLine"
Lenin

76

Basta usare android:inputType="textCapWords" nel tuo elemento EditText.

Per esempio:

<EditText
    android:id="@+id/txtName"
    android:layout_width="0dp"
    android:layout_height="40dp"
    android:layout_weight="0.7"
    android:inputType="textCapWords"
    android:textColorHint="#aaa"
    android:hint="Name Surname"
    android:textSize="12sp" />

Fare riferimento al seguente link per riferimento: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType


È buona norma contrassegnare il codice nell'elemento code invece di renderlo grassetto.
Ravi Bhatt,

13
Questa risposta non aiuta davvero la domanda di OP. Questo metterà in maiuscolo il primo carattere per ogni parola , non il primo carattere del testo di input (che viene assunto come una frase). Sebbene ciò possa probabilmente aiutare gli altri, la risposta corretta è la risposta accettata.
Andrew T.

37

Applica la seguente riga nel tuo EditText in XML.

android:inputType="textCapSentences|textMultiLine"

Consentirà inoltre il supporto multilinea.


2
Questa dovrebbe essere una risposta accettata, poiché questa è l'unica soluzione che non comprimerà EditText in una riga singola
egorikem,

31
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

o android:inputType="textCapSentences"funzionerà solo se l'impostazione di capitalizzazione automatica della tastiera del dispositivo è abilitata.


Grazie, sono rimasto bloccato perché ho appena disabilitato l'impostazione di capitalizzazione automatica della tastiera del dispositivo
Pulkit il

20

Ho riscontrato lo stesso problema, condividendo solo quello che ho scoperto. Potrebbe aiutare te e gli altri ...

Prova questo sul tuo layout.aggiungi la riga sotto nel tuo EditText.

android:inputType="textCapWords|textCapSentences"

funziona bene su di me .. spero che funzioni anche su di te ...


5

Posso assicurarvi che entrambe le risposte renderanno maiuscola la prima lettera e non costituiranno una riga singola edittext.

Se vuoi farlo in XMl sotto è il codice

android:inputType="textCapWords|textCapSentences"

Se vuoi farlo in attività / frammento ecc. Sotto è il codice

momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)

PS: se hai altre proprietà, puoi anche aggiungerlo facilmente con una pipe "|" simbolo, assicurati solo che non ci sia spazio in xml tra le proprietà dell'attributo


5

Per l'uso delle maiuscole in Modifica testo è possibile scegliere i due tipi di input seguenti:

  1. Android: InputType = "textCapSentences"
  2. Android: InputType = "textCapWords"

textCapSentences In
questo modo la prima lettera della prima parola sarà maiuscola in ogni frase.

textCapWords Questo permetterà alla prima lettera di ogni parola come Capitale.

Se vuoi entrambi gli attributi usa semplicemente | firmare con entrambi gli attributi

android:inputType="textCapSentences|textCapWords"

3

Prova questo codice, metterà in maiuscolo il primo carattere di tutte le parole.

- imposta addTextChangedListener per la vista EditText

edt_text.addTextChangedListener (osservatore);

- Aggiungi TextWatcher

TextWatcher watcher = new TextWatcher() {
    int mStart = 0;

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        mStart = start + count;
    }

    @Override
    public void afterTextChanged(Editable s) {
        String input = s.toString();
        String capitalizedText;
        if (input.length() < 1)
            capitalizedText = input;
        else if (input.length() > 1 && input.contains(" ")) {
            String fstr = input.substring(0, input.lastIndexOf(" ") + 1);
            if (fstr.length() == input.length()) {
                capitalizedText = fstr;
            } else {
                String sstr = input.substring(input.lastIndexOf(" ") + 1);
                sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1);
                capitalizedText = fstr + sstr;
            }
        } else
            capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1);

        if (!capitalizedText.equals(edt_text.getText().toString())) {
            edt_text.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {
                    edt_text.setSelection(mStart);
                    edt_text.removeTextChangedListener(this);
                }
            });
            edt_text.setText(capitalizedText);
        }
    }
};

3

Per capitalizzare, puoi fare quanto segue con il testo di modifica:

Per rendere la prima lettera maiuscola di ogni parola :

android:inputType="textCapWords"

Per rendere maiuscola la prima lettera di ogni frase :

android:inputType="textCapSentences"

Per rendere ogni lettera maiuscola:

android:inputType="textCapCharacters"

Ma ciò comporterà solo modifiche alla tastiera e l'utente potrà modificare la modalità per scrivere lettere in minuscolo.

Quindi questo approccio non è molto apprezzato se vuoi davvero i dati in formato maiuscolo, aggiungi prima la seguente classe:

public class CapitalizeFirstLetter {
    public static String capitaliseName(String name) {
        String collect[] = name.split(" ");
        String returnName = "";
        for (int i = 0; i < collect.length; i++) {
            collect[i] = collect[i].trim().toLowerCase();
            if (collect[i].isEmpty() == false) {
                returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) + " ";
            }
        }
        return returnName.trim();
    }
    public static String capitaliseOnlyFirstLetter(String data)
    {
        return data.substring(0,1).toUpperCase()+data.substring(1);
    }
}

E poi,

Ora per capitalizzare ogni parola:

CapitalizeFirstLetter.capitaliseName(name);

Per scrivere in maiuscolo solo la prima parola:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);

2

Imposta il tipo di input in XML e nel file JAVA in questo modo,

In XML,

Android: InputType = "textMultiLine | textCapSentences"

Permetterà anche file multilinea e JAVA,

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

assicurati che l' impostazione di maiuscole / minuscole della tastiera sia abilitata .


2

Nel tuo file XML di layout:

  • impostato android:inputType="textCapSentences"

  • Devi EditTextavere il primo alfabeto della prima parola di ogni frase come maiuscolo

  • O android:inputType="textCapWords"sul tuo EditText per avere il primo alfabeto di ogni parola come maiuscolo


1

utilizzare questo codice solo per le maiuscole della prima lettera per EditText

MainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:tag="true">
    </EditText>

</RelativeLayout>

MainActivity.java

EditText et = findViewById(R.id.et);
        et.addTextChangedListener(new TextWatcher() {
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
            {
                if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true"))
                {
                    et.setTag("false");
                    et.setText(et.getText().toString().toUpperCase());
                    et.setSelection(et.getText().toString().length());
                }
                if(et.getText().toString().length() == 0)
                {
                    et.setTag("true");
                }
            }

            public void afterTextChanged(Editable editable) {

            }
        });

0

Prima era android:capitalize="words", che ora è deprecato. L'alternativa consigliata è usareandroid:inputType="textCapWords"

Si noti che funzionerà solo se l'impostazione di capitalizzazione automatica della tastiera del dispositivo è abilitata.

Per fare questo a livello di codice, utilizzare il seguente metodo:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0

ho fondato e la mia soluzione: hai 2 modi per risolverlo in Java:

 testEditText.setInputType(InputType.TYPE_CLASS_TEXT 
 | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

e xml:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />

0

programmazione

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);

0

se stai scrivendo stili in styles.xml allora

rimuovere la proprietà android: inputType e aggiungere sotto le righe

<item name="android:capitalize">words</item>
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.