使用InputMethodManager隐藏后如何带回软键盘

时间:2018-08-03 06:07:36

标签: android android-edittext android-softkeyboard

我是Android编程的新手,所以只是制作了一个简单的应用程序。
在应用程序中,我有一个EditText组件,该组件会随着键盘弹出而向上滑动,并且我不希望它向上滑动,因此我进行了搜索并找到了解决方法,

在OnCreate方法中

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

但是问题是使用此行之后,单击输入键盘后EditText仍然存在,所以我进行了搜索并找到了隐藏键盘的方法

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

但是现在的问题是键盘可以成功隐藏,但是在我重新单击EditText之后看不到。所以,我在网上搜索,但是没有运气,开始在Android Studio中搜索方法以使键盘可见并确定拿出些什么

public static void showSoftKeyboard(Activity activity){
        InputMethodManager inputMethodManager1 =
                (InputMethodManager) activity.getSystemService(
                        Activity.INPUT_METHOD_SERVICE);
        inputMethodManager1.showSoftInputFromInputMethod(
                activity.getCurrentFocus().getWindowToken(), 0);

但是它不起作用抛出NullPointerException。 因此,请任何人可以帮助我。

还有没有其他选择可以将EditText保持在其位置而不会向上滑动。这样就无需应用此隐藏和显示方法,如果不能,请告诉我如何取回键盘。

2 个答案:

答案 0 :(得分:1)

评论您的逻辑,请尝试以下方法

Android Manifest中的活动代码中的行下方写下如下内容

<activity android:name=".yourActivityName"
        android:windowSoftInputMode="adjustPan">
</activity>

然后将此行添加到edittext中的layout xml

android:imeOptions="actionDone"

如下所示

<EditText
    android:id="@+id/edt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Edittext"
    android:singleLine="true"
    android:maxLines="1"
    android:imeOptions="actionDone"/>

或通过您的代码进行设置

yourEditText.setImeOptions(EditorInfo.IME_ACTION_DONE); 

在软键盘上单击完成按钮时,它将自动关闭。

下面是完成click的{​​{1}}软键盘事件的代码。

button

答案 1 :(得分:0)

尝试

public void showSoftKeyboard(Context context, View view){
    if(view.requestFocus()){
        InputMethodManager imm =(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}

public void showSoftKeyboard(Context context){
   if(context == null) return;
   InputMethodManager imm =(InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
   imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}