nasıl dışarıda EditText tıkladıktan sonra android sanal klavye gizlemek için?
Tamam herkes bir klavye gizlemek için uygulamak gerektiğini biliyor:
InputMethodManager imm = (InputMethodManager) getSystemService(
INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Sorun burada kullanıcı veya bir EditBox veya softKeyboard değil, başka bir yere dokunur seçtiğinde klavyeyi gizlemek için nasıl?
Benim ana Etkinliği onTouchEvent kullanmaya çalıştım ama yalnızca kullanıcı dokunduğu herhangi bir diğer görüş dışında etkili ve scrollview yok.
Dokunuş, bir tıklama uygulamak, herhangi bir başarı olmadan dinleyici odaklanmaya çalıştım.
Ben bile dokunma olayları durdurmak için kendi scrollview uygulamak için çalıştı ama sadece olayın koordinatlarını ve görünümü tıklandığında değil alabilirim.
Bunu yapmak için standart bir yol var mı?? iPhone gerçekten kolay oldu.
CEVAP
Burada benim uygulama için ne yaptım, ve, bekle, mükemmel gibi çalışıyor!
İlk burada sadece klavye gizler kodu:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
Bu programı bir sınıf koymak, ya da eğer bir faaliyet içinde tanımlıyorsanız, etkinlik parametresi önlemek veya hideSoftKeyboard(this)
Ara.
En zor kısmı onu aramak için zaman. Sen-ebilmek yazmak bir yöntem olduğunu yineler her View
faaliyet ve kontrol eğer instanceof EditText
konuşma kaydı setOnTouchListener
bileşen ve her şey düşecek. Bunun nasıl olduğunu merak ediyorsanız, aslında oldukça basit. Ne burada, aşağıdaki gibi özyinelemeli bir yöntem yazmak, yazı vb Kur özel gibi aslında bu bir şey yapmak için kullanabilirsiniz,... Burada yöntemi
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(MyActivity.this);
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);
}
}
}
10 ** etkinlik sonrasında, sadece bu yöntemi çağırın. Geçmesi ne olduğunu merak ediyorsanız, üst kabı id
. id
ebeveyn için bir ad atayın
<RelativeLayoutPanel android:id="@ id/parent"> ... </RelativeLayout>
ve tüm bu setupUI(findViewById(R.id.parent))
, Ara.
Kullanmak istiyorsanız bu etkili olabilir oluşturmak genişletilmiş Activity
ve koyun bu yöntemde, ve tüm diğer faaliyetleri uygulama genişletmek bu aktivite ve çağrı setupUI()
onCreate()
yöntem.
Umarım yardımcı olur.
Eğer üst düzen için 1'den fazla etkinlik ortak kimliği tanımlamak gibi kullanırsanız
<RelativeLayout android:id="@ id/main_parent"> ... </RelativeLayout>
Sonra Activity
sınıf genişletmek ve OnResume()
İçinde setupUI(findViewById(R.id.main_parent))
tanımlamak ve `Etkinlik yerine bu sınıfı genişletirin your program
Nasıl yapılır yakalama 'sanal kla...
Numarayı nasıl android bir EditText kl...
Nasıl Android yazılım klavye görünürlü...
Nasıl Android bir gecikmeden sonra bir...
Nasıl edittext odaklanan yumuşak klavy...