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能够打印,但实际软键盘还是无法显示。
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
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毫秒打开软键盘");
}
10
收起
正在回答
1回答
同学,你好。请使用真机测试一下,老师测试的是可以打开软键盘的。祝学习愉快!
3.Android 高级应用与Kotlin综合实战
- 参与学习 人
- 提交作业 116 份
- 解答问题 1012 个
本阶段是提升项目经验的必备,除Android开发的高级控件,还有Android官方大力推荐的开发语言Kotlin,未来Android发展的方向,最后使用Kotlin来开发热门电商项目。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星