Android开发中输入对话框的简单操作
众所周知,应用程序中总是有这样那样的注释。有些应用程序直接在底部添加一个EditText和一个按钮,让用户输入文本或表达式,然后点击按钮提交,下面不妨跟爱站技术频道小编一起来看看Android开发中输入对话框的简单操作吧!
1、需求分析
比如下面这种效果:
这里的效果可以细分为四点:
- 点击底部的按钮之后会弹出对话框,对话框在布局的底部;
- 对话框中有输入框EditText,可以输入内容;
- 对话框弹出后EditText会自动获取焦点,弹出软键盘;
- 软键盘会把对话框顶上去,便于用户编辑。
一开始我想到的是PopupWindow,但是由于里面有EditText,与软键盘交互起来很是头疼,于是改用了Activity。这样一来我们就可以像用Activity一样使用这个对话框,方便多了。不过毕竟跟我们平时使用的Activity还是有所不同的,特别是要设置好它的样式,否则也是一堆的坑啊。
2、对话框Activity的布局与样式
下面就来着手实现我们想要的对话框了。新建一个工程,MainActivity只是一个配角,底部放一个按钮就搞定。我们的主角是DialogActivity,它的布局很简单,就跟平时的Activity一样:
重点是它的样式,看下面的代码:
要设置的属性很多,我都做了注释了,大家明白每个属性的作用就行,这里就细说了。别忘了,到清单文件中给DialogActivity用上这个主题:
运行一下,相信大家可以看到效果了。
3、自动弹出软键盘效果
对话框的界面我们已经做好了,但是为了用户体验更好,我们要在对话框出现的时候自动弹出软键盘。下面介绍两种方法:
3.1、使用InputMethodManager类显示软键盘
我们平时要让某个EditText获得焦点自动弹出软键盘可以这样写:
InputMethodManager inputManager =(InputMethodManager)etComment.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(etComment, 0);
但是这里面有一点要注意:我们想要让EditText获得焦点,那必须等界面绘制完毕才行。所以这样设置了延迟300ms执行弹出软键盘的代码,给界面留出绘制的时间:
new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { InputMethodManager inputManager = (InputMethodManager) etComment.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(etComment, 0); return false; } }).sendEmptyMessageDelayed(0, 300);
加上上面的代码,你就可以软键盘自己弹出来了。
3.1、设置windowSoftInputMode属性
你如果细心的话一定发现前面给DialogActivity设置样式的代码中有一个windowSoftInputMode属性没有添加注释,请原谅我卖了个关子。这个属性是设置窗口和软键盘的交互模式的。它的属性有很多,可以参考我后面给出的参考文章。这里我们用到了adjustResize,它的作用就是调整界面布局给软键盘留出足够的空间。那么stateHidden呢?其实软键盘没有自动弹出就是它搞的鬼,它表示一般情况下软键盘都是隐藏的。我们改成另外一个属性:stateVisible,它表示软键盘通常是可见的。
再来运行一下,软键盘就如期而至了。
4、后记
我们在需求分析中提到的效果已经实现完毕。后来我还想过给对话框增加自定义的动画效果,但是退出时的动画始终没有设置成功,所以如果有读者实现了,欢迎交流学习。
以上就是爱站技术频道小编为大家带来的Android开发中输入对话框的简单操作,希望这篇内容能够给大家带来帮助,感谢大家的阅读。