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. View
Etkinliğinizdeki her bir yolla yinelenen bir yöntem yazabilir ve bunun o bileşene instanceof EditText
bir kayıtlı değilse setOnTouchListener
ve 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 id
ana konteynerin o parametresidir . Bir atama id
gibi ü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 Activity
yö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 Activity
ve 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)
}
}