次のスニペットは、単にキーボードを非表示にします。
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
if(inputMethodManager.isAcceptingText()){
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(),
0
);
}
}
これをユーティリティクラスに入れるか、アクティビティ内で定義する場合は、アクティビティパラメータを回避するか、を呼び出しますhideSoftKeyboard(this)
。
最も難しい部分は、いつそれを呼び出すかです。View
アクティビティのすべてを反復処理するメソッドを記述し、それがそのコンポーネントにinstanceof EditText
登録されていないかどうかを確認すると、すべてが適切に機能します。setOnTouchListener
あなたがそれをどのように行うのか疑問に思っている場合、それは実際には非常に簡単です。これがあなたがすることです、あなたは次のような再帰的なメソッドを書きます、実際あなたはこれを使ってカスタム書体のセットアップなど何でもすることができます...これがメソッドです
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);
}
}
}
setContentView
それがすべてです、あなたの活動の後にこのメソッドを呼び出すだけです。渡すパラメータがわからない場合はid
、親コンテナのパラメータです。id
次のように親コンテナにを割り当てます
<RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
と呼んsetupUI(findViewById(R.id.parent))
で、それだけです。
これを効果的に使用したい場合は、拡張Activity
を作成してこのメソッドを配置し、アプリケーション内の他のすべてのアクティビティでこのアクティビティを拡張setupUI()
してonCreate()
メソッドで呼び出すことができます。
それが役に立てば幸い。
複数のアクティビティを使用する場合は、次のように親レイアウトに共通IDを定義します。
<RelativeLayout android:id="@+id/main_parent"> ... </RelativeLayout>
次に、クラスを拡張し、その中Activity
で定義し、「アクティビティ」の代わりにこのクラスを拡張しますsetupUI(findViewById(R.id.main_parent))
OnResume()
in your program
上記の関数のKotlinバージョンは次のとおりです。
@file:JvmName("KeyboardUtils")
fun Activity.hideSoftKeyboard() {
currentFocus?.let {
val inputMethodManager = ContextCompat.getSystemService(this, InputMethodManager::class.java)!!
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}