2016-02-16 21 views
20

Questo può sembrare contro-intuitivo, ma esiste un modo per disabilitare o rimuovere il suggerimento di etichetta mobile in TextInputLayout? La ragione per cui voglio usare TextInputLayout invece di soloè per il contatore fornito da TextInputLayout.Disabilita/Rimuove il testo di suggerimento di etichette mobili in TextInputLayout XML

Ecco quello che ho finora:

<android.support.design.widget.TextInputLayout 
      android:id="@+id/textContainer" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:scrollbars="vertical" 
      app:counterEnabled="true" 
      app:counterMaxLength="100"> 

      <EditText 
       android:id="@+id/myEditText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="top|left" 
       android:inputType="textMultiLine|textCapSentences" 
       android:maxLength="100" 
       android:scrollbars="vertical" 
       android:hint="This is my cool hint"/> 

     </android.support.design.widget.TextInputLayout> 
+0

idea migliore per programatically devi dare suggerimento e ora TextChange dare al suggerimento nulla in editbox questa idea può aiutare a –

+0

problema è il colore suggerimento. Diventa bianco quando si digita qualcosa. Si prega di cambiare il colore suggerimento o cambiare il colore di sfondo. Vedrai il suggerimento durante la digitazione. –

risposta

50

partire la versione 23.2.0 del la libreria di supporto è possibile chiamare

setHintEnabled(false) 

o mettere nel vostro XML TextInputLayout come tale:

app:hintEnabled="false" 

Anche se il nome potrebbe fa pensare rimuove tutti i suggerimenti, rimuove solo quello mobile.

Documenti collegati e problema: http://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#setHintEnabled(boolean)

https://code.google.com/p/android/issues/detail?id=181590

0

Credo che questo vi aiuterà a:

textContainer.setHintAnimationEnabled(false); 
+0

Non funziona amico mio. Ho provato nel codice e tramite l'app 'XML: hintAnimationEnabled =" false "' e nessuno dei due ha funzionato. Penso che questo disabiliti l'animazione di quell'etichetta che galleggia. – Micro

+0

Quindi, vuoi rimuovere il testo suggerimento, vero? – Darshak

+0

Voglio che il testo del suggerimento appaia all'interno di 'EditText' sbiadito. Quindi, quando fai clic su "Modifica testo", voglio che il testo suggerimento scompaia, invece di spostarti sull'etichetta mobile. Proprio come un normale 'EditText' lo fa. – Micro

0

aggiornamento della libreria di progettazione per V23 e aggiungi app:hintAnimationEnabled="false" nel TextInputLayout

+0

Questo semplicemente disabilita l'animazione attuale, non fa altro ... –

21

Ci potrebbero essere tre modi per raggiungere questo obiettivo:

Impostare android:hint su TextInputLayout su un carattere _ e mantenere android:hint="This is my cool hint" impostato su EditText.

<android.support.design.widget.TextInputLayout 
    .... 
    .... 
    android:hint=" ">  <<---------- 

    <EditText 
     .... 
     .... 
     android:hint="This is my cool hint"/> <<---------- 

</android.support.design.widget.TextInputLayout> 

Questo funziona perché TextInputLayout esegue il seguente controllo prima di utilizzare il EditText's suggerimento:

// If we do not have a valid hint, try and retrieve it from the EditText 
if (TextUtils.isEmpty(mHint)) { 
    setHint(mEditText.getHint()); 
    // Clear the EditText's hint as we will display it ourselves 
    mEditText.setHint(null); 
} 

Impostando android:hint=" ", if (TextUtils.isEmpty(mHint)) restituisce false, e il EditText mantiene il suo suggerimento.

Seconda opzione sarebbe quella di sottoclasse TextInputLayout e sovrascrivere la sua addView(View child, int index, ViewGroup.LayoutParams params) metodo:

public class CTextInputLayout extends TextInputLayout { 

    public CTextInputLayout(Context context) { 
     this(context, null); 
    } 

    public CTextInputLayout(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void addView(View child, int index, ViewGroup.LayoutParams params) { 
     if (child instanceof EditText) { 
      // cache the actual hint 
      CharSequence hint = ((EditText)child).getHint(); 
      // remove the hint for now - we don't want TextInputLayout to see it 
      ((EditText)child).setHint(null); 
      // let `TextInputLayout` do its thing 
      super.addView(child, index, params); 
      // finally, set the hint back 
      ((EditText)child).setHint(hint); 
     } else { 
      // Carry on adding the View... 
      super.addView(child, index, params); 
     } 
    } 
} 

quindi utilizzare il vostro personalizzato CTextInoutLayout al posto di quello della libreria di supporto di progettazione:

<your.package.name.CTextInputLayout 
    .... 
    .... >  <<---------- 

    <EditText 
     .... 
     .... 
     android:hint="This is my cool hint"/> <<---------- 

</your.package.name.CTextInputLayout> 

In terzo luogo, e probabilmente il modo più diretto sarebbe effettuare le seguenti chiamate:

// remove hint from `TextInputLayout` 
((TextInputLayout)findViewById(R.id.textContainer)).setHint(null); 
// set the hint back on the `EditText` 
// The passed `String` could also be a string resource 
((EditText)findViewById(R.id.myEditText)).setHint("This is my cool hinttt.");