Sto lavorando ad una piccola app per la lista delle cose da fare e finora tutto ha funzionato abbastanza bene. C'è un piccolo capriccio che mi piacerebbe scoprire. Ogni volta che vado ad aggiungere un nuovo elemento, ho una finestra di dialogo con una vista EditText mostrata all'interno. Quando seleziono la vista EditText, la tastiera esce per inserire il testo, come dovrebbe. Nella maggior parte delle applicazioni, il valore predefinito sembra essere che il tasto maiuscole è trattenuto per la prima lettera ... anche se non lo fa per la mia vista. Ci deve essere un modo semplice per risolvere, ma ho cercato il riferimento ripetutamente e non riesco a trovarlo. Sto pensando che ci deve essere un attributo xml per il riferimento caricato dall'adapter, ma non riesco a scoprire di cosa si tratta.Prima lettera maiuscola per EditText
risposta
staticamente (vale a dire nel file XML di layout): impostare android:inputType="textCapSentences"
sul EditText
.
Programmaticamente: è necessario includere InputType.TYPE_CLASS_TEXT
nello InputType
di EditText
, ad es.
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 la capitalizzazione del primo carattere di ogni frase.
Basta usare android:inputType="textCapWords"
nel vostro elemento EditText.
Ad 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 di riferimento: http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType
È buona norma contrassegnare il codice nell'elemento di codice anziché renderlo in grassetto. –
Questa risposta non aiuta molto la domanda dell'OP. Questo capitalizza il primo carattere per ogni ** parola **, non il primo carattere del testo di input (che è assunto come una frase). Sebbene questo possa probabilmente aiutare gli altri, la risposta corretta è la risposta accettata. –
La soluzione che rende il campo di testo di modifica su una riga singola – Shivang
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
o android:inputType="textCapSentences"
funziona solo se la vostra tastiera del dispositivo Auto maiuscolo Impostazione abilitato.
La soluzione che crea il campo di testo di modifica su una riga singola – Shivang
Ho riscontrato lo stesso problema, condividendo solo quello che ho scoperto. Potrebbe aiutare te e gli altri ...
Prova questo sul tuo layout.add la riga sottostante nel tuo EditText
.
android:inputType="textCapWords|textCapSentences"
funziona bene su di me .. spero che funziona anche su di voi ...
provare questo codice, sarà capitalizzare primo carattere di tutte le parole.
- set 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);
}
}
};
Applicare seguente riga nel EditText in XML.
android:inputType="textCapSentences|textMultiLine"
Consentirà inoltre il supporto multi-linea.
In precedenza era android:capitalize="words"
, che ora è deprecato. L'alternativa consigliata è quella di utilizzare android:inputType="textCapWords"
Si prega di notare che questo funzionerà solo se la tastiera del dispositivo è impostata su Auto Capitalize Setting.
Per fare questo programatically, utilizzare il seguente metodo:
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
Set tipo di ingresso in XML così come nel file di JAVA come questo,
In XML,
android: inputType = "textMultiLine | textCapSentences"
Essa consentirà inoltre multilinea e nel file di JAVA,
edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
fanno Auto-capitalizzazione impostazione del che la tastiera èabilitato.
testEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" funzionerà solo se la tastiera del dispositivo è attivata. – Lakshmanan
Perchè abilitare questo causa il mio 'android: lines =" 7 "' per non mostrare più 7 linee (ora torna automaticamente a 1 riga) –
estEditText.setInputType (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); o android: inputType = "textCapSentences" funzionerà solo se l'impostazione di maiuscola automatica della tastiera del tuo dispositivo è abilitata. ** Qual è l'alternativa per questo, a livello di programmazione? ** – Swift