Android
Modifica il testo
Ricerca…
Lavorare con EditTexts
EditText è il widget di inserimento testo standard nelle app Android. Se l'utente deve inserire del testo in un'app, questo è il modo principale per farlo.
Modifica il testo
Ci sono molte proprietà importanti che possono essere impostate per personalizzare il comportamento di un EditText. Molti di questi sono elencati di seguito. Consulta la guida ai campi di testo ufficiali per ulteriori dettagli sul campo di input.
uso
Un EditText viene aggiunto a un layout con tutti i comportamenti predefiniti con il seguente XML:
<EditText
android:id="@+id/et_simple"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</EditText>
Nota che EditText è semplicemente un'estensione sottile di TextView e eredita tutte le stesse proprietà.
Recupero del valore
Ottenere il valore del testo inserito in un EditText è il seguente:
EditText simpleEditText = (EditText) findViewById(R.id.et_simple);
String strValue = simpleEditText.getText().toString();
Ulteriore personalizzazione dell'iscrizione
Potremmo voler limitare l'immissione a una singola riga di testo (evitare le newline):
<EditText
android:singleLine="true"
android:lines="1"
/>
Puoi limitare i caratteri che possono essere inseriti in un campo usando l'attributo cifre:
<EditText
android:inputType="number"
android:digits="01"
/>
Ciò limiterebbe le cifre inserite solo a "0" e "1". Potremmo voler limitare il numero totale di caratteri con:
<EditText
android:maxLength="5"
/>
Usando queste proprietà possiamo definire il comportamento di input previsto per i campi di testo.
Regolazione dei colori
Puoi regolare il colore dello sfondo di evidenziazione del testo selezionato all'interno di un EditText con la proprietà android:textColorHighlight
:
<EditText
android:textColorHighlight="#7cff88"
/>
Visualizzazione dei suggerimenti segnaposto
È possibile che si desideri impostare il suggerimento per il controllo EditText per richiedere all'utente un input specifico con:
<EditText
...
android:hint="@string/my_hint">
</EditText>
suggerimenti
Modifica del colore della linea di fondo
Supponendo che si stia utilizzando la libreria AppCompat, è possibile sovrascrivere gli stili colorControlNormal, colorControlActivated e colorControlHighlight:
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">#d32f2f</item>
<item name="colorControlActivated">#ff5722</item>
<item name="colorControlHighlight">#f44336</item>
</style>
Se non vedi questi stili applicati all'interno di un DialogFragment, c'è un bug noto quando si usa il LayoutInflater passato al metodo onCreateView ().
Il problema è già stato risolto nella libreria AppCompat v23. Vedi questa guida su come aggiornare. Un'altra soluzione temporanea consiste nell'utilizzare il gonfiaggio del layout dell'attività anziché quello passato nel metodo onCreateView ():
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment, container);
}
Ascoltare l'input di EditText
Scopri le note di base degli ascoltatori di eventi di base per sapere come ascoltare le modifiche a un EditText ed eseguire un'azione quando si verificano tali cambiamenti.
Visualizzazione del feedback delle etichette mobili
Tradizionalmente, EditText nasconde il messaggio di suggerimento (spiegato sopra) dopo che l'utente inizia a digitare. Inoltre, qualsiasi messaggio di errore di convalida doveva essere gestito manualmente dallo sviluppatore.
Con TextInputLayout
è possibile impostare un'etichetta mobile per visualizzare suggerimenti e messaggi di errore. Puoi trovare maggiori dettagli qui .
Personalizzazione di InputType
I campi di testo possono avere diversi tipi di input, come numero, data, password o indirizzo e-mail. Il tipo determina il tipo di caratteri consentiti all'interno del campo e può richiedere alla tastiera virtuale di ottimizzare il layout per i caratteri utilizzati di frequente.
Per impostazione predefinita, qualsiasi contenuto di testo all'interno di un controllo EditText
viene visualizzato come testo normale. Impostando l'attributo inputType
, possiamo facilitare l'inserimento di diversi tipi di informazioni, come numeri di telefono e password:
<EditText
...
android:inputType="phone">
</EditText>
I tipi di input più comuni includono:
genere | Descrizione |
---|---|
textUri | Testo che verrà utilizzato come URI |
textEmailAddress | Testo che verrà utilizzato come indirizzo e-mail |
textPersonName | Testo che è il nome di una persona |
textPassword | Testo che è una password che dovrebbe essere oscurata |
numero | Un campo solo numerico |
Telefono | Per inserire un numero di telefono |
Data | Per inserire una data |
tempo | Per entrare in un tempo |
textMultiLine | Consentire più righe di testo nel campo |
android:inputType
consente inoltre di specificare determinati comportamenti della tastiera, ad esempio la possibilità di utilizzare tutte le nuove parole in maiuscolo o utilizzare funzioni come i suggerimenti di completamento automatico e di ortografia.
Ecco alcuni dei valori dei tipi di input comuni che definiscono i comportamenti della tastiera:
genere | Descrizione |
---|---|
textCapSentences | Tastiera di testo normale che capitalizza la prima lettera per ogni nuova frase |
textCapWords | Tastiera di testo normale che capitalizza ogni parola. Buono per titoli o nomi di persone |
textAutoCorrect | Tastiera di testo normale che corregge le parole comunemente errate |
È possibile impostare più attributi inputType
se necessario (separati da '|').
Esempio:
<EditText
android:id="@+id/postal_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/postal_address_hint"
android:inputType="textPostalAddress|
textCapWords|
textNoSuggestions" />
Puoi vedere un elenco di tutti i tipi di input disponibili qui .
attributo `inputype`
attributo inputype
nel widget EditText
: (testato su Android 4.4.3 e 2.3.3)
<EditText android:id="@+id/et_test" android:inputType="?????"/>
textLongMessage = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
textFilter = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: minuscolo. Suggerimento: no . Inserisci. carbonizzazione: e. e ogni cosa
textCapWords = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: custodia cammello . Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
textCapSentences = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: caso di sentenza . Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
tempo = tastiera: numerico. Tasto Invio: Invia / Avanti. Emozione: no. Astuccio: -. Suggerimento: no . Inserisci. caratteri:
textMultiLine = Tastiera: alfabeto / predefinito. Tasto Invio: accanto . Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
numero = Tastiera: numerico . Tasto Invio: Invia / Avanti. Emozione: no. Astuccio: -. Suggerimento: no. Inserisci. chars: niente
textEmailAddress = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: no . Caso: minuscolo. Suggerimento: no . Inserisci. caratteri: @ e . e ogni cosa
(Nessun tipo) = Tastiera: alfabeto / predefinito. Tasto Invio: accanto . Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
textPassword = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: no. Caso: minuscolo. Suggerimento: no . Inserisci. carbonizzazione: e. e ogni cosa
text = Tastiera: Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
textShortMessage = Tastiera: alfabeto / predefinito. Tasto Invio: emozione . Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
textUri = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: no. Caso: minuscolo. Suggerimento: no . Inserisci. caratteri: / e . e ogni cosa
textCapCharacters = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: MAIUSCOLE . Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
telefono = Tastiera: numerico . Tasto Invio: Invia / Avanti. Emozione: no. Astuccio: -. Suggerimento: no . Inserisci. caratteri: *** #. - / () WPN, + **
textPersonName = Tastiera: alfabeto / predefinito. Tasto Invio: Invia / Avanti. Emozione: sì Caso: minuscolo. Suggerimento: sì. Inserisci. carbonizzazione: e. e ogni cosa
Nota: l'impostazione di Auto-capitalization
cambierà il comportamento predefinito.
Nota 2: nella Numeric keyboard
, tutti i numeri sono in inglese 1234567890.
Nota 3: l'impostazione Correction/Suggestion
cambierà il comportamento predefinito.
Nascondere SoftKeyboard
Nascondere Softkeyboard è un requisito di base di solito quando si lavora con EditText. Il softkey per impostazione predefinita può essere chiuso solo premendo il pulsante Indietro e così la maggior parte degli sviluppatori utilizza InputMethodManager per forzare Android a nascondere la tastiera virtuale chiamante hideSoftInputFromWindow e passando il token della finestra contenente la vista focalizzata. Il codice per eseguire quanto segue:
public void hideSoftKeyboard()
{
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
Il codice è diretto, ma un altro problema importante che si presenta è che la funzione hide deve essere chiamata quando si verifica qualche evento. Cosa fare quando hai bisogno della Softkeyboard nascosta premendo su un punto diverso dal tuo EditText? Il seguente codice fornisce una funzione ordinata che deve essere chiamata nel tuo metodo onCreate () solo una volta.
public void setupUI(View view)
{
String s = "inside";
//Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard();
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
Icona o pulsante all'interno di Custom Edit Text e la sua azione e click listers.
Questo esempio aiuterà ad avere il testo Modifica con l'icona sul lato destro.
Nota: In questo sto usando setCompoundDrawablesWithIntrinsicBounds, quindi se vuoi cambiare la posizione dell'icona puoi ottenerlo usando setCompoundDrawablesWithIntrinsicBounds in setIcon.
public class MKEditText extends AppCompatEditText {
public interface IconClickListener {
public void onClick();
}
private IconClickListener mIconClickListener;
private static final String TAG = MKEditText.class.getSimpleName();
private final int EXTRA_TOUCH_AREA = 50;
private Drawable mDrawable;
private boolean touchDown;
public MKEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MKEditText(Context context) {
super(context);
}
public MKEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void showRightIcon() {
mDrawable = ContextCompat.getDrawable(getContext(), R.drawable.ic_android_black_24dp);
setIcon();
}
public void setIconClickListener(IconClickListener iconClickListener) {
mIconClickListener = iconClickListener;
}
private void setIcon() {
Drawable[] drawables = getCompoundDrawables();
setCompoundDrawablesWithIntrinsicBounds(drawables[0], drawables[1], mDrawable, drawables[3]);
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
setSelection(getText().length());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
final int right = getRight();
final int drawableSize = getCompoundPaddingRight();
final int x = (int) event.getX();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA) {
touchDown = true;
return true;
}
break;
case MotionEvent.ACTION_UP:
if (x + EXTRA_TOUCH_AREA >= right - drawableSize && x <= right + EXTRA_TOUCH_AREA && touchDown) {
touchDown = false;
if (mIconClickListener != null) {
mIconClickListener.onClick();
}
return true;
}
touchDown = false;
break;
}
return super.onTouchEvent(event);
}
}
Se si desidera modificare l'area di tocco, è possibile modificare i valori predefiniti di EXTRA_TOUCH_AREA come 50.
E per abilitare il pulsante e fare clic sul listener puoi chiamare dalla tua attività o frammento come questo,
MKEditText mkEditText = (MKEditText) findViewById(R.id.password);
mkEditText.showRightIcon();
mkEditText.setIconClickListener(new MKEditText.IconClickListener() {
@Override
public void onClick() {
// You can do action here for the icon.
}
});