web-dev-qa-db-fra.com

Majuscule première lettre pour EditText

Je travaille sur une petite application personnelle Todo List et jusqu'à présent, tout fonctionne assez bien. Il y a une petite bizarrerie que j'aimerais comprendre. Chaque fois que je vais pour ajouter un nouvel élément, j'ai un dialogue avec une vue EditText montrant à l'intérieur. Lorsque je sélectionne la vue EditText, le clavier apparaît pour saisir le texte, comme il se doit. Dans la plupart des applications, le défaut semble être que la touche Maj est maintenue pour la première lettre ... bien que cela ne le fasse pas à mon avis. Il doit exister un moyen simple de corriger le problème, mais j'ai recherché la référence à plusieurs reprises et ne parviens pas à la trouver. Je pense qu'il doit y avoir un attribut xml pour la référence chargée par l'adaptateur, mais je ne peux pas savoir ce que c'est.

337
Maximus

Statiquement (c'est-à-dire dans votre fichier XML de présentation): définissez Android:inputType="textCapSentences" sur votre EditText.

Par programme: vous devez inclure InputType.TYPE_CLASS_TEXT dans la InputType de la EditText, par ex.

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

Peut être combiné avec le texte et ses variantes pour demander la capitalisation du premier caractère de chaque phrase.

- Google Docs

753
McStretch

Utilisez simplement Android:inputType="textCapWords" dans votre élément EditText.

Par exemple:

<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" />

Pour plus d'informations, reportez-vous au lien suivant: http://developer.Android.com/reference/Android/widget/TextView.html#attr_Android%3ainputType

64
Mangi Morobe
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

ou Android:inputType="textCapSentences" ne fonctionnera que si le paramètre d'activation automatique du clavier de votre appareil est activé.

26
Lakshmanan

Appliquez la ligne suivante dans votre EditText en XML.

Android:inputType="textCapSentences|textMultiLine"

Cela permettra également un support multiligne.

24
Shivang

J'ai rencontré le même problème, partageant simplement ce que j'ai découvert. Pourrait vous aider et aider les autres ...

Essayez ceci sur votre mise en page. Ajoutez la ligne ci-dessous dans votre EditText.

Android:inputType="textCapWords|textCapSentences"

fonctionne bien sur moi .. espérons que cela fonctionne aussi sur vous ...

15
user4144348

Je peux vous assurer que les réponses donneront une première lettre majuscule et ne feront pas edittext simple ligne.

Si vous voulez le faire en XMl, voici le code

Android:inputType="textCapWords|textCapSentences"

Si vous voulez le faire dans activity/fragment etc., le code est indiqué ci-dessous.

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

PS: Si vous rencontrez d’autres biens, vous pouvez facilement les ajouter avec un tuyau "|" symbole, assurez-vous simplement qu'il n'y a pas d'espace dans XML entre les propriétés d'attribut 

3
Tushar

Définissez le type d'entrée dans XML ainsi que dans le fichier Java comme ceci,

En XML,

Android: inputType = "textMultiLine | textCapSentences"

Il permettra également multiline et en fichier Java,

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

assurez-vous que le paramètre Mise en majuscule automatique est réglé sur Activé

2
Siddharth Sheth

Dans votre fichier XML de mise en page:  

  • set Android:inputType="textCapSentences" 

  • Sur votre EditText, avoir le premier alphabet du premier mot de chaque phrase comme majuscule

  • Ou Android:inputType="textCapWords" sur votre EditText pour avoir le premier alphabet de chaque mot en majuscule

2
Himmat Gill

Essayez ce code, il mettra en majuscule le premier caractère de tous les mots.

- Définit addTextChangedListener pour la vue EditText

edt_text.addTextChangedListener (observateur);

- Ajouter 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);
        }
    }
};
0
Dharmesh Patel

Par programme

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

Pour capitaliser, vous pouvez effectuer les opérations suivantes avec le texte modifié:

Pour rendre la première lettre majuscule de chaque mot :

Android:inputType="textCapWords"

Pour que la première lettre soit en majuscule de chaque phrase :

Android:inputType="textCapSentences"

Faire chaque lettre capital:

Android:inputType="textCapCharacters"

Mais cela ne modifiera que le clavier et l'utilisateur pourra changer le mode d'écriture d'une lettre dans une petite casse.

Donc, cette approche n’est pas très appréciée si vous voulez vraiment que les données soient au format majuscule, ajoutez d’abord la classe suivante:

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

Et alors,

Maintenant, pour capitaliser chaque mot:

CapitalizeFirstLetter.capitaliseName(name);

Pour capitaliser uniquement le premier mot:

CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);
0
Suraj Vaishnav

Pour la capitalisation dans EditText, vous pouvez choisir les deux types d'entrée ci-dessous:

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

textCapSentences
Ceci laissera la première lettre du premier mot en majuscule dans chaque phrase.

textCapWords Ceci laissera la première lettre de chaque mot en majuscule.

Si vous voulez les deux attributs, utilisez simplement | signer avec les deux attributs

Android:inputType="textCapSentences|textCapWords"
0
anand tripathi

utilise ce code uniquement en majuscule pour 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
milan pithadia

j'ai fondé et ma solution: vous avez 2 façons de le résoudre en Java:

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

et xml: 

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