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.
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.
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
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é.
Appliquez la ligne suivante dans votre EditText en XML.
Android:inputType="textCapSentences|textMultiLine"
Cela permettra également un support multiligne.
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 ...
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
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é .
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
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);
}
}
};
Par programme
TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);
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);
Pour la capitalisation dans EditText, vous pouvez choisir les deux types d'entrée ci-dessous:
- Android: inputType = "textCapSentences"
- 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"
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) {
}
});
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" />