2016-06-10 17 views
7

Desidero creare un EditTextLayout, ma desidero un testo diverso per etichetta e suggerimento.Etichetta e suggerimento diversi per TextInputLayout

Ad esempio: il testo dell'etichetta è "Numero di telefono" e il testo di suggerimento è "+6281342134".

È possibile?

Il mio codice è:

<android.support.design.widget.TextInputLayout 
     android:id="@+id/phone_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.design.widget.TextInputEditText 
      android:id="@+id/phone" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="+6281342134" 
      android:inputType="phone" /> 
    </android.support.design.widget.TextInputLayout> 
+1

'android: label =" Numero di telefono " android: suggerimento =" + 6281342134 "' –

+0

Ho provato ad aggiungere il listener di messa a fuoco e modificare il suggerimento quando l'edittext ha messo a fuoco. Funziona, ma non penso che sia la soluzione migliore. – mutokenji

risposta

18

ho preso un approccio simile a Rehan

<android.support.design.widget.TextInputEditText 
    android:id="@+id/edit_text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) { 
      inputLayout.setHint("We did it!"); 
     } else { 
      inputLayout.setHint("Testing 123"); 
     } 
    } 
}); 

L'animazione era abbastanza buono per me senza disabilitare l'animazione:

Example

0

entrare in modalità Editting testo XML e aggiungere questo al EditText:

android:label="Phone Number" 
android:hint="+6281342134" 
0

Se volete label e hint essere entro EditText, è possibile impostare queste proprietà a EditText

android:label="Phone Number" 
android:hint="+6281342134" 

Ma, se si desidera visualizzare label come un altro contenitore di testo, è possibile utilizzare la seguente gerarchia di viste.

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/phoneLabel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textSize="22sp" 
      andrioid:text="phone number"/> 

     <EditText 
      android:id="@+id/phoneText" 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      android:textSize="22sp" 
      android:hint="+6281342134" /> 

    </LinearLayout> 
+0

Ma voglio usare l'etichetta mobile per il mio editText – mutokenji

4

si può semplicemente farlo in questo modo:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/phone_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="Phone Number"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@+id/phone" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="+6281342134" 
     android:inputType="phone"/> 
</android.support.design.widget.TextInputLayout> 

Ma questo si tradurrà sovrapposizione di entrambi i suggerimenti cioè numero di telefono e6.281.342,134 mila. Quindi è necessario implementare OnFocusChangeListener per questo. (Non è una soluzione così buona ma funzionerà per te).

Nel layout, aggiungere solo il suggerimento a TextInputLayout. Ho impostato hintAnimationEnabled su false perché penso che l'animazione potrebbe non apparire liscia con diversi suggerimenti.

<android.support.design.widget.TextInputLayout 
    android:id="@+id/phone_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="Phone Number" 
    app:hintAnimationEnabled="false"> 

    <android.support.design.widget.TextInputEditText 
     android:id="@+id/phone" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:inputType="phone"/> 
</android.support.design.widget.TextInputLayout> 

Nel file java, creare OnFocusChangeListener:

private View.OnFocusChangeListener onPhoneNumberFocusChangeListener = new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) { 
      ((EditText)v).setHint("+6281342134"); 
     } else { 
      ((EditText)v).setHint(""); 
     } 
    } 
}; 

e impostarlo al EditText

phone.setOnFocusChangeListener(onPhoneNumberFocusChangeListener); 
1

Ecco come lo sto facendo senza codice (solo XML), consentendo nel contempo sia un'etichetta e un segnaposto allo stesso tempo, come nelle linee guida sulla progettazione dei materiali.

layout XML:

<android.support.design.widget.TextInputLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="My Label Text"> 
    <android.support.design.widget.TextInputEditText 
    android:id="@android:id/input" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColorHint="@drawable/hint_selector" 
    android:hint="Placeholder Text"/> 
</android.support.design.widget.TextInputLayout> 

Colore Selettore XML:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:color="?android:textColorHint" /> 
    <item android:color="@android:color/transparent" /> 
</selector> 

La chiave qui è di fare solo trasparente per impostazione predefinita e mostrare solo il testo segnaposto quando è messa a fuoco. Non c'è bisogno di cambiare colore, dal momento che questo rispetterà qualsiasi tema personalizzato, così come i temi chiari e scuri.