我是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保持在其位置而不会向上滑动。这样就无需应用此隐藏和显示方法,如果不能,请告诉我如何取回键盘。
答案 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);
}