2015-07-30 14 views
8

Podczas używania EditText w połączeniu z Design lib's (wer. 22.2.1) TextInputLayout uzyskiwanie podpowiedzi programowo zwraca wartość null.EditText getHint() zwraca null podczas korzystania z biblioteki wsparcia projektu

Próbuję programistycznie dopisać gwiazdkę "*" do pola obowiązkowego, stąd EditText.getHint(), ale fakt, że zwraca zerowy jest w tym przypadku problemem.

EditText editText = (EditText) findViewById(R.id.edit2); 
String hint = String.format("%s *", editText.getHint()); 
editText.setHint(hint); 

Asterisk overlays the hint

Prosty kod ilustracja: layout.xml:

<android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    <EditText 
      android:id="@+id/edit2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="@string/hello_world" 
      android:inputType="text"/> 
</android.support.design.widget.TextInputLayout> 

Java:

EditText editText = (EditText) findViewById(R.id.edit2); 
if (editText.getHint() == null) throw new AssertionError("Hint should not be null"); 

zależność: kompilacji „com.android.support:design: 22.2.1 '

Wcześniej powiązany numer here!

+1

Jest to [podpowiedź wielu problemów związanych z 'TextInputLayout' ] (https://code.google.com/p/android/issues/list?can=1&q=TextInputLayout+hint&colspec=ID+Type+Status+Oweter+Summary+Stars&cells=tiles). Możesz rozważyć wypróbowanie [innych implementacji etykiet pływających] (http://android-arsenal.com/search?q=floating+label). – CommonsWare

+0

Problemem jest oczywiście funkcja setHint(), która nie uwzględnia wskazówki poprzednio skonfigurowanej w obiekcie TextInputLayout – dobridog

Odpowiedz

10

Właściwie przesuwa wskazówkę widoku macierzystego TextInputLayout który otacza EditText widok:

można uzyskać podpowiedź tak:

android.support.design.widget.TextInputLayout parent = (android.support.design.widget.TextInputLayout) yourEditText.getParent(); 
String hint = parent.getHint().toString(); 

A jeśli chcesz dodać * zrobić to tak:

parent.setHint(parent.getHint() + "*"); 

Happy codding! :)

+8

Należy zauważyć, że jeśli używasz 'TextInputEditText' zgodnie z zaleceniami, musisz użyć' getParent(). GetParent() ', aby faktycznie uzyskać' TextInputLayout' –

-1

Zostało to naprawione w projekcie wsparcia 23.0.0, ale projekt musi zostać skompilowany dla api 23.

build.gradle

android { 
    compileSdkVersion 23 
    buildToolsVersion '23' 
    .... 
} 
dependencies{ 
    compile 'com.android.support:appcompat-v7:23.0.0' 
... 
} 

Ustawianie wskazówkę na EditText jak wcześniej:

<android.support.design.widget.TextInputLayout 
    android:id="@+id/inputField" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
    <EditText 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/hello_world" 
     android:inputType="text"/> 

Teraz dodając dodatkowy znak na podpowiedź:

TextInputLayout inputField = (TextInputLayout) findViewById(R.id.inputLayout); 
String hint = String.format("%s *", inputField.getHint()); 
inputField.setHint(hint); 
+2

Nie jest to poprawione w 23.0.0 – superuserdo

+0

Problem z deklaracją podpowiedzi w TextInputLayout jest taki, że wskazówka nie jest wyświetlana, chyba że została ustawiona programowo (jak w przykładzie).Ale ostatecznie przeniesienie wskazówki do edycji tekstu zadziałało. Zaktualizuje odpowiedź, możesz ją zweryfikować. – dobridog

+0

Kwestia jest związana z informacją null dotyczącą wskazówki EditText w TextInputLayout. Potwierdziłem, że ten problem nadal występuje w 23 bibliotece. Nawet przy ustawianiu wskazówki dla TextInputLayout, wskazówka wciąż zwraca wartość null. – superuserdo

0

Podpowiedź jest połączony z układem jego rodzic

((TextInputLayout) view.getParent()). GetHint()

Powiązane problemy