10

wiem, że kod odwołuje tyhe klawiaturę w Androidzie jestUkryj klawiaturę w Androidzie podczas dotykania poza Edycja tekstem Powierzchnia

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

Czy ktoś może zaproponować mi sposób, aby ukryć klawiaturę jeśli dotykać obszaru poza tekstem obszar inny niż klawiatura na ekranie.

+2

Kod wydaje się być w porządku. Spowoduje to ukrycie klawiatury we wszystkich sytuacjach. W niektórych przypadkach przekazujesz 'InputMethodManager.HIDE_IMPLICIT_ONLY' jako drugi parametr, aby ukryć klawiaturę tylko wtedy, gdy użytkownik jawnie nie wymusił jej wyświetlenia (przytrzymując menu). –

+0

Checkout moja odpowiedź http://stackoverflow.com/ pytania/4165414/how-to-hide-soft-keyboard-on-android-po-kliknięciu-poza-edittext/36786783 # 36786783 – Uzair

Odpowiedz

15

Kod odwołać Softkeyboard jest poniżej:

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

Można umieść go w klasie Utility lub jeśli definiujesz go w ramach działania, unikaj parametru activity lub wywołaj hideSoftKeyboard (to).

Możesz napisać metodę, która przechodzi przez każdy widok w twojej aktywności i sprawdzać, czy jest to instancja EditText, jeśli nie rejestruje on setOnTouchListener na tym komponencie i wszystko będzie na miejscu. Jeśli zastanawiasz się, jak to zrobić, w rzeczywistości jest to całkiem proste. Oto, co robisz, piszesz metodę rekursywną, jak poniżej.

public void setupUI(View view) { 

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

wywołać tę metodę po SetcontentView() z PARAMET jak id swojego widok jak:

RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout> 

Następnie zadzwonić setupUI(findViewById(R.id.parent))

+0

Fajna odpowiedź .... :) –

+12

kopia http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-po-kliknięciu-poza-edittextem – Gaurav

+0

Podczas gdy najlepszą odpowiedzią w powyższym linku był ten - http://stackoverflow.com/a/19828165/609782 Mniej kodu, bez iteracji. – Darpan

7

Najlepszy sposób można użycie jest przycisku Gotowe oprócz EditText dokonać onClickListener zrobić podobny,

done.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 
} 
}); 
6

To może być stary, ale mam tę pracę przez wykonawczym niestandardowej klasy

public class DismissKeyboardListener implements OnClickListener { 

    Activity mAct; 

    public DismissKeyboardListener(Activity act) { 
     this.mAct = act; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v instanceof ViewGroup) { 
      hideSoftKeyboard(this.mAct); 
     } 
    }   
} 

public void hideSoftKeyboard(Activity activity) { 
     InputMethodManager imm = (InputMethodManager) 
     getSystemService(Activity.INPUT_METHOD_SERVICE); 
     imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
} 

najlepsze p w tym przypadku należy utworzyć klasę Pomocnika, a każdy kontener Układu Względnego/Liniowego powinien to zaimplementować.

**** Zanotuj tylko główny Pojemnik powinien realizować tę klasę (dla optymalizacji) ****

i wdrożyć go tak:

Parent.setOnClickListener(new DismissKeyboardListener(this)); 

słowa kluczowego jest to dla aktywności. więc jeśli używasz fragmentu, używaj go jak getActivity();

--- Kciuk w górę, jeśli to ci pomoże ... --- Wiwaty Ralph ---

Powiązane problemy