2013-08-18 20 views
5

Dobrze, po godzinach spędzonych szukając rozwiązania, przybyłem tutaj.EditText ukryty przez klawiaturę, gdy android: gravity = "center" - Android

Myślę, że to może być problem z Androidem.

Spróbuj utworzyć ten prosty układ. Otwórz klawiaturę, ukryj ją, a następnie otwórz ponownie i EditText jest ukryty.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="300dp" 
     android:gravity="center" 
     android:inputType="phone" 
     android:maxLength="14" 
     android:text="some text" 
     android:textColor="#666666" 
     android:textSize="22sp" /> 

</RelativeLayout> 

Teraz usuń android:gravity="center" i wszystko działa! Zanim mnie zapytasz, tak, dodałem już android:windowSoftInputMode="adjustPan"

Każde rozwiązanie byłoby bardzo docenione! Dzięki

+0

Co się stanie, jeśli trzymasz go wewnątrz scrollView? Więc to też się dzieje? –

+0

Umieściłem mój RelativeLayout wewnątrz ScrollView: to niczego nie zmienia, przepraszam –

+0

Czy cały "EditText" jest ukryty, czy tylko tam, gdzie zaczynają się znaki? – codeMagic

Odpowiedz

2

Niedawno rozwiązałem ten problem na telefonie Nexus 7. Takie zachowanie nie wystąpiło w innych urządzeniach testowych. Wydaje się, że sztuczka polega na zmianie fokusa, ZANIM zamkniesz klawiaturę programową. Klawiatura jest zamknięta w 3 punktach - kliknięcie przycisku Gotowe, kliknięcie poza edytorem edycyjnym i kliknięcie przycisku Wstecz.

Najpierw utwórz ukrytego elementu jeść skupienie

<MyEditText 
      android:id="@+id/editHidden" 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:layout_below="@id/imageLogin" 
      /> 

ja przechowywane tego, ale to trochę brzydki ...

@Override 
    protected void onResume() { 
     super.onResume(); 

     Utils.focusable = findViewById(R.id.editHidden); 

Teraz zmieniać ostrość do ukrytego elementu, gdy klawiatura zamknięte.

public static void clearFocus() { 
     try { 
      if (focusable!=null) 
       focusable.requestFocus(); 
     } catch (Exception e) {} 
    } 

    public static void hideSoftKeyboard(View view) { 
     clearFocus(); 
     if (view!=null) { 
      try { 
       InputMethodManager inputMethodManager = (InputMethodManager) view.getContext().getSystemService(Activity.INPUT_METHOD_SERVICE); 
       inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); 
      } catch (Exception e) {} 
     } 
    } 

Następnie uruchom funkcję hideKeyboard w miejscach klawiatura jest zamknięty: EditText powrotem przycisk wciśnięty:

@Override 
    public boolean onKeyPreIme(int keyCode, KeyEvent event) 
    { 
     if(keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      try { 
       Utils.clearFocus(); 
      } catch (Exception e) {} 
     } 
     return super.onKeyPreIme(keyCode, event); 
    } 

Done przycisk wciśnięty, należy dołączyć to do wszelkich polach EditText problem występuje z:

public static OnEditorActionListener getOnEditorActionListener() { 
     return new OnEditorActionListener() {   

      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
       if(actionId==EditorInfo.IME_ACTION_DONE){ 
        hideSoftKeyboard(v); 
       } 

       return false; 
      } 
     }; 
    } 

Kliknij poza polem tekstowym - dołącz do wszystkich elementów na stronie onCreate();

public static void setupUI (Widok) {

try { 
    //Set up touch listener for non-text box views to hide keyboard. 
    if(!(view instanceof EditText)) { 

     view.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       hideSoftKeyboard(v); 
       return false; 
      } 

     }); 
    } 

    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 

     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 

      View innerView = ((ViewGroup) view).getChildAt(i); 

      setupUI(innerView); 
     } 
    } 
} catch (Exception e) {} 

}

To dość brudny, ale nie rozwiąże problemu, mam nadzieję, że istnieje lepszy sposób chociaż.

+1

Wooow, dziękuję, ale to dla mnie zbyt trudne. Pominąłem problem z usunięciem androida: gravity = "center" –

Powiązane problemy