Aşağıdaki kod parçası klavyeyi gizler:
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
Bunu bir yardımcı program sınıfına koyabilir veya bir etkinlik içinde tanımlıyorsanız, etkinlik parametresinden kaçının veya çağırın hideSoftKeyboard(this).
En zor kısım ne zaman arayacağınızdır. ViewEtkinliğinizdeki her bir yolla yinelenen bir yöntem yazabilir ve bunun o bileşene instanceof EditTextbir kayıtlı değilse setOnTouchListenerve her şeyin yerinde olup olmadığını kontrol edebilirsiniz . Bunu nasıl yapacağınızı merak ediyorsanız, aslında oldukça basittir. Yaptığınız şey, aşağıdaki gibi özyinelemeli bir yöntem yazıyorsunuz, aslında bunu özel yazı tipleri vb. Gibi bir şey yapmak için kullanabilirsiniz ... İşte yöntem
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);
}
}
}
Hepsi bu setContentView, faaliyetinizde sizden sonra bu yöntemi çağırmanız yeterlidir. Hangi parametreyi geçeceğinizi merak ediyorsanız, bu idana konteynerin o parametresidir . Bir atama idgibi üst kabına göre
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
ve ara setupUI(findViewById(R.id.parent)), hepsi bu.
Bunu etkili bir şekilde kullanmak istiyorsanız, genişletilmiş bir Activityyöntem oluşturabilir ve uygulamanızdaki diğer tüm etkinliklerin bu etkinliği genişletmesini setupUI()ve onCreate()yöntemde çağırmasını sağlayabilirsiniz .
Umarım yardımcı olur.
Birden fazla etkinlik kullanıyorsanız, ana düzen için ortak kimliği tanımlayın.
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
Daha sonra bir sınıfı genişletin Activityve setupUI(findViewById(R.id.main_parent))içinde tanımlayın OnResume()ve `` Etkinlik yerine bu sınıfı genişletinin your program
Yukarıdaki fonksiyonun Kotlin versiyonu:
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}