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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow