去除EditText自动获得的焦点

本文介绍了解决Android应用中EditText控件首次加载时自动弹出输入法的问题。提供了两种有效方法:一是通过设置Activity的软键盘模式,二是利用不可见控件抢占初始焦点。

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

当带有EditView的activity第一次进入时,第一个EditText框会自动获得焦点弹出输入法,在保证点击输入框还能正常弹出输入法的情况下,如何去掉这个刚进入弹出来的输入法呢?


关闭输入法的方法都失败了,如下:

先是:

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

然后,下面这个导致空指针(界面是嵌套布局的,没法知道到底哪个组件拿到了焦点)

    imm.hideSoftInputFromInputMethod(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);

下面这个没效果:

    if (imm.isActive())
    {
      imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_IMPLICIT_ONLY);
    }



【验证有效的方法1】

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=26099&archiver=1

在activity 的 OnCreate方法里面加下面这句代码:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

有没有副作用暂时不知道,但是输入法的确藏起来了,而且以后点击文本框输入法还能出来。


【验证有效的方法2】

http://hi.baidu.com/lphack/blog/item/c41a517613fa8a03b151b9fe.html

在EditText控件之前加入一个同级别的看不见的组件来夺取焦点,没有焦点输入法就不会出来了:

<LinearLayout

    android:id="@+id/linearLayout_focus"

    android:focusable="true"

    android:focusableInTouchMode="true"

    android:layout_width="0px"

    android:layout_height="0px"/>


还有些更麻烦的方法没测试,比如:先把所有输入框设置为不可获取焦点,找个时间再改回去;先把上层容器藏起来,过段时间再显示。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值