EditText已经获取焦点,无法打开软键盘

EditText已经获取焦点,无法打开软键盘

# 具体遇到的问题
SettingActiivty中,设置步长的EditText (变量名input),运行时已经获得焦点(光标闪烁),但没有打开软键盘。
# 报错信息的截图
程序运行无报错。
# 相关课程内容截图

为了打开软键盘问题,在Manifest.xml中的SettingActivity设置如下:

<activity
   android:name=".SettingActivity"
   android:screenOrientation="portrait"
   android:windowSoftInputMode="adjustResize"/>

在onInitVariable()初始化变量函数里加了一句代码如下:

protected void onInitVariable() {
setContentView(R.layout.act_setting);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);//出现软键盘
}

private void stepClick(float stepLen) 函数里,对话框建立显示后

我加了部分代码:

builder.create().show();//创建并显示对话框
           input.setEnabled(true);//可编辑状态
           input.setFocusableInTouchMode(true);//点触模式
           input.requestFocus();//获得焦点
           Timer timer = new Timer();
timer.schedule(new TimerTask() //让软键盘延时(300毫秒)弹出,更好的加载View
           {
@Override
               public void run() {
//                    输入法管理器
                   InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//                    inputMethodManager.showSoftInput(input, 0);//EditText获取软键盘
                   inputMethodManager.toggleSoftInput(0, inputMethodManager.HIDE_NOT_ALWAYS);//弹出软键盘
                   Log.e("keyboard", "软件盘已经打开");
}
}, 300);
Log.e("keyboard","延时300毫秒打开软键盘");

运行时显示已经正常运行这部分代码,Log能够打印,但实际软键盘还是无法显示。
http://img1.sycdn.imooc.com//climg/5fe993fc0922e40812801024.jpg# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

private void stepClick(float stepLen) {
final AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this);
builder.setTitle("设置步长");
View view = View.inflate(SettingActivity.this, R.layout.view_dlg_input, null);
final EditText input = view.findViewById(R.id.input);//输入框
           input.setText(String.valueOf(stepLen));//输入框显示系统settings获取的stepLen步长
           builder.setView(view);
builder.setNegativeButton("取消", null);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
               public void onClick(final DialogInterface dialog, int which) {
String val = input.getText().toString();
//有输入数据
                   if (val != null && val.length() > 0) {
float len = Float.parseFloat(val);//把数据转换成float
                       settings.setStepLength(len);//设置步长
                       if (adapter != null) {
adapter.notifyDataSetChanged();//更新适配器
                       }
} else {
Toast.makeText(SettingActivity.this, "输入正确的参数!", Toast.LENGTH_LONG).show();
}
}
});
builder.create().show();//创建并显示对话框
           input.setEnabled(true);//可编辑状态
           input.setFocusableInTouchMode(true);//点触模式
           input.requestFocus();//获得焦点
           Timer timer = new Timer();
timer.schedule(new TimerTask() //让软键盘延时(300毫秒)弹出,更好的加载View
           {
@Override
               public void run() {
//                    输入法管理器
                   InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//                    inputMethodManager.showSoftInput(input, 0);//EditText获取软键盘
                   inputMethodManager.toggleSoftInput(0, inputMethodManager.HIDE_NOT_ALWAYS);//弹出软键盘
                   Log.e("keyboard", "软件盘已经打开");
}
}, 300);
Log.e("keyboard","延时300毫秒打开软键盘");
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。请使用真机测试一下,老师测试的是可以打开软键盘的。祝学习愉快!

  • 慕运维0750787 提问者 #1

    我用的就是真机,但是打不开软键盘

    2020-12-28 19:18:20
  • 好帮手慕雪 回复 提问者 慕运维0750787 #2

    不会呀。那同学试试新建一个工程,只放一个EditText看看能不能打开软键盘。如果可以,再测试AlertDialog里的。一点点的进行排查。如果有多余的手机,也可以再换个手机试试。


    2020-12-29 09:44:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师