2013-06-24 11 views
10

Mój problem polega na tym, że komunikat o błędzie w moich EditTextach przewija się nad paskiem akcji. Czy to jest błąd Androida, czy robię coś złego?Wiadomość Android setError() przewijanie na ActionBar

Również ten błąd występuje nawet wtedy, gdy klawiatura jest wyłączona, po prostu znajduje się na zrzutach ekranu.

Oto co mówię: http://imgur.com/fG8bd3E,uFzhOXa#1 < - istnieją dwa obrazy

Oto mój układ, dodam EditTexts w moim kodu do kiosk_form_table LinearLayout

<ScrollView 
    style="@style/DefaultBackground" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="0.6" 
    android:fadeScrollbars="false" 
    android:padding="20dp" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingRight="20dp" > 

     <LinearLayout 
      android:id="@+id/kiosk_form_table" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" /> 

     <Button 
      android:id="@+id/kiosk_submit_large" 
      style="@style/LoginButton" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:onClick="submit" 
      android:text="@string/submit" /> 
    </LinearLayout> 
</ScrollView> 

Jak dodać EditTexts

kiosk_form.addView(getKioskRow(R.layout.kiosk_text_row, "First Name", true, null)); 

private View getKioskRow(int layout, String header, boolean required, String buttonName) 
{ 
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(layout, null); 
    view.setTag(required); 
    addHeader((TextView) inflater.inflate(R.layout.field_header, null), header); 
    if (required) 
     ((TextView) view.findViewById(R.id.kiosk_input)).setHint("Required"); 
    if (buttonName != null) 
     ((Button) view.findViewById(R.id.kiosk_input_button)).setText(buttonName); 
    return view; 
} 

private void addHeader(TextView view, String header) 
{ 
    view.setTag(false); 
    view.setText(header); 
    kiosk_form.addView(view); 
} 

Jak ustawić błąd

(TextView) view).setError(getString(R.string.error_field_required)); 

Odpowiedz

0

Gdzie chcesz zobaczyć komunikat o błędzie? Jeśli chcesz to w EditText, ustaw go na editText.

((EditText) findViewByID(R.id.my_edit_text)).setError ...... // and so on 

Edytuj: oryginalna odpowiedź nie pomogła.

Oto jedno z możliwych rozwiązań: możesz ukryć komunikat o błędzie, gdy użytkownik przewija widok. Po zakończeniu przewijania można ponownie ustawić komunikat o błędzie i powinien pojawić się we właściwym miejscu! Oto w jaki sposób można wykryć podczas przewijania dokończona Android: How to detect when a scroll has ended

+0

Chcę, aby moje komunikaty o błędach pojawiały się w różnych widokach, które są podklasą TextView, więc jeśli spojrzysz na mój ostatni fragment kodu, dodaję komunikat o błędzie do moich widoków, z których niektóre to teksty do edycji. Mój problem nie polega na tym, że błąd się nie pojawia. Mój błąd polega na tym, że kiedy przewijam, wyskakująca wiadomość pojawia się na pasku akcji widocznym w moim linku imgur (jestem nowy w społeczności, więc nie mam wystarczającej reputacji, aby osadzić link). – Sagar

+0

Ohhh ok, rozumiem. Oto jedno z możliwych rozwiązań: możesz ukryć komunikat o błędzie, gdy użytkownik przewija widok. Po zakończeniu przewijania można ponownie ustawić komunikat o błędzie i powinien pojawić się we właściwym miejscu! Oto, jak można wykryć zakończenie przewijania: http://stackoverflow.com/questions/2089552/android-how-to-detect-when-a-scroll-has-ended – Oleksiy

+0

Hmm, widzę, że działa. Po prostu z ciekawości wiesz, że szybko wyłączyć wszystkie komunikaty o błędach, lub jeśli jest to nawet możliwe. Pytam, ponieważ w tej chwili przeglądam dużą liczbę widoków, aby wypełnić ten formularz i chciałbym uniknąć zapętlenia listy, aby wyłączyć komunikaty o błędach za każdym razem, gdy użytkownik przewija. Bez względu na podziękowania za pomoc! – Sagar

0

rozwiązać similiar problemu przez ustawienie flagi

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
2

Jest Android OS bug. Możesz śledzić jego postępy here

Powiązane problemy