Android中DialogFragment自动弹出输入法

本文介绍了一种在DialogFragment中的EditText自动弹出输入法的方法。通过在onResume()方法中发送延时消息来确保输入法稳定显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下刚刚解决的问题,DialogFragment中的EditText获得焦点后自动弹出输入法的办法。

网上找到好多资料,但是很多已经过时或者不是针对dialog的设置。

现在将我测试成功的方法记录如下,供大家参考。

现在比较喜欢继承DialogFragment来实现dialog,这样dialog相关的代码可以分离出去,而且dialog的生命周期可以和Fragment一样管理。而我们现在讨论的弹出输入法也和生命周期回调方法有关。

继承DialogFragment实现dialog,实现onCreateDialog()方法,在这个方法中创建dialog并返回,这和以前创建diglog是一样的。

@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {
		log.info("onCreateDialog");
		AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
		builder.setTitle("密码输入框");
		builder.setMessage("输入密码:");
		editTextPassword = new EditText(getActivity());
		editTextPassword.setFocusable(true);
		editTextPassword.setFocusableInTouchMode(true);
		editTextPassword.requestFocus();
		
		builder.setView(editTextPassword);
		builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		
		builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		return builder.create();
	}

上面的代码创建了一个Alert类型的Dialog,并且包含一个可以输入的EditText。

好多人都说,EditText获得焦点后,就会弹出输入法,其实不然。具体原因我也不是很清楚,在这里我们还需要手动让输入法出现。

实现DialogFragment的生命周期方法onResume(),这个方法会在dialog显示的时候被回调,然后在里面发送一个延时消息,调出输入法。

@Override
	public void onResume() {
		super.onResume();
		log.info("onResume");
		(new Handler()).postDelayed(new Runnable() {
			public void run() {
				log.info("postDelayed");
				InputMethodManager inManager = (InputMethodManager)editTextPassword.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
				inManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
			}
			},500);
	}

run()方法中的那两句代码就是启动输入法的,如果不用延时的方法,输入法会瞬间弹出,然后又消失。原因我还是不知道,才疏学浅,请见谅。

这样,我们在使用这个dialog的时候,就会自动弹出输入法了。


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值