好久没动安卓原生开发,都快忘的差不多了。
项目有个需求是在弹出的 AlertDialog 中输入一些文字,这就牵扯到软键盘的自动弹出与隐藏了。虽然以前也做过,但时间久了有些生疏,还是费了些时间。所以记录下来便于以后翻阅。
效果图:
点开之后自动弹出有延时,这个时间是自己设的,设多长时间根据情况而定。
具体实现
关键点说明:
- 这句代码解决软键盘不能弹出的问题。如果不加这句,软键盘不会弹出。
alertDialog.setView(LayoutInflater.from(context).inflate(R.layout.widget_ip_config, null));
alertDialog.show()
一定要在alertDialog.getWindow().setContentView(view)
之前调用,否则 AlertDialog 不会弹出。- 这里自动弹出软键盘用了延迟加载的方法,建个计时器等200毫秒之后再弹出。因为Dialog渲染或初始化需要一定时间,在渲染完成之前软键盘是弹不出来的。等待的时间根据自己喜好来设置,但不能太短,亲测100毫秒的话有时不能成功弹出,200毫秒比较保险。
- 隐藏软键盘的时机是通过
setOnDismissListener()
监听了onDismiss()
方法,在此方法执行隐藏软键盘的操作。
下面贴代码:
先建一个封装的工具类
IpConfigWidget.java
public class IpConfigWidget {
@Inject
public IpConfigWidget() {
}
public void showIpConfigDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
AlertDialog alertDialog = builder.create();
//解决无法弹出软键盘的bug
alertDialog.setView(LayoutInflater.from(context).inflate(R.layout.widget_ip_config, null));
alertDialog.show();
View view = LayoutInflater.from(context).inflate(R.layout.widget_ip_config, null);
//输入ip地址的EditText框
EditText etIpAddress = view.findViewById(R.id.et_ip_