2016-02-16 20 views
20

Bu, karşı sezgisel görünebilir ancak yüzer etiket ipucunu TextInputLayout içinde devre dışı bırakmak veya kaldırmak için bir yol var mı? Bir EditText yerine TextInputLayout kullanmak istediğim, TextInputLayout'un sağladığı sayaç içindir.TextInputLayout XML'de yüzen etiket ipucu metnini devre dışı bırak/kaldır

<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

İyi bir fikir programlama Eğer ipucu ve textChange olay zamanı editbox fikri size yardımcı olabilecek –

+0

Sorun ipucu renktir null ipucu ver vermek zorunda. Bir şey yazarken beyaz olur. Lütfen ipucu rengini değiştirin veya arka plan rengini değiştirin. Yazarken ipucunu göreceksiniz. –

cevap

50

Eğer

setHintEnabled(false) 

çağırabilir Destek Kütüphanesi sürümünü 23.2.0 başlayan veya örneğin sizin TextInputLayout xml koyarak:

app:hintEnabled="false" 

adı kudreti düşündürüyor rağmen tüm ipuçlarını kaldırır, sadece yüzen olanı kaldırır.

İlgili dokümanlar ve sorunu: http://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#setHintEnabled(boolean)

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

0

Bunun size yardımcı olacağını düşündüğümüz:

textContainer.setHintAnimationEnabled(false); 
+0

Arkadaşım çalışmıyor. Kodda ve XML 'app: hintAnimationEnabled =" false "ile denedim ve ne işe yaramadı. Bence bu etiketin yüzünü yukarı kaldırıyor. – Micro

+0

Yani, ipucu metnini kaldırmak istiyorsunuz, öyle değil mi? – Darshak

+0

İpucu metninin 'EditText' solunda görünmesini istiyorum. Sonra 'EditText' 'i tıkladığınızda ipucu metninin, kayan etikete geçmek yerine kaybolmasını istiyorum. Sadece düzenli bir 'EditText' gibi yapar. – Micro

0

güncelleme V23 tasarım kütüphanesi ve Orada TextInputLayout

+0

Bu sadece gerçek animasyonu devre dışı bırakır, başka hiçbir şey yapmaz ... –

21

yılında app:hintAnimationEnabled="false" eklemek İşte

Ben bugüne kadar ne olduğunu Bunu elde etmenin üç yolu olabilir:

numaralı telefonunumaralı _ karakterine ayarlayın ve EditText numaralı telefondan android:hint="This is my cool hint" öğesini koruyun.

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

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

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

TextInputLayoutEditText's ipucu kullanmadan önce aşağıdaki kontrolü gerçekleştirir, çünkü bu işleri: android:hint=" " ayarlayarak

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

, if (TextUtils.isEmpty(mHint))false için değerlendirir ve EditText onun ipucu korur.

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

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

</your.package.name.CTextInputLayout> 

:

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

Sonra tasarım desteği kütüphanesinden birinin yerine özel CTextInoutLayout kullanın:

İkinci seçenek TextInputLayout alt sınıf ve addView(View child, int index, ViewGroup.LayoutParams params) yöntemini geçersiz olacaktır 3 Üçüncüsü, ve muhtemelen en basit yol, aşağıdaki çağrıları yapmak olabilir:

// 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.");