android中editText弹出软键盘并且根据editText中是否是内容来控制按钮的可用性

本文介绍如何在Android中使EditText自动获得焦点并弹出软键盘,解决EditText加载未完成的问题。此外,还介绍了使用addTextChangedListener监听EditText内容变化的方法,确保按钮状态随输入内容动态更新。

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

      android 中editText点击弹出软键盘比较容易,可是有一种情况是,我们中转到一个编辑页面,让焦点在第一个editText中,同时自动弹出软键盘。一般情况的情况是

     

   editText.setFocusable(true);
   InputMethodManager inputManager =(InputMethodManager)editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
   inputManager.showSoftInput(editText, 0);

      这种情况,在写法上没有问题,可是我会发现,这种情况,很多时间是没有反应的, 为什么?因为有时候,editText并没有完全加载完,所以后面的事件,无法相应。怎么办?我们只要让弹出的软键盘延迟半秒钟就OK了,把上面的代码,改一下OK

     

   editText.setFocusable(true);
   Timer timer = new Timer();
        timer.schedule(new TimerTask()
                       {
                           public void run()
                           {
                               InputMethodManager inputManager = (InputMethodManager)editText.setFocusable.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                               inputManager.showSoftInput(editText.setFocusable, 0);
                           }
                       },
                500);

这回再试一下,就OK了

     还有一种需求是这样的,当editText里面的内容为空时,确定按钮为不可用,只有有内容的时候,才为可用。这个很多会说,在点提交的时候,做一下判断就可以,然后Toast一个提示,不是就可以了吗,速度还快。可是有时候,用户的需求是变态的。我们只能满足他,怎么做呢,我想大家都知道,editText有一个事件,addTextChangedListener它里面可以对editText进行监听,如下:

      editText.addTextChangedListener(new TextWatcher() {            
          @Override            
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {                  //内容改变前            }            
          @Override           
          public void onTextChanged(CharSequence s, int start, int before, int count) {                 //内容改后            }            
          @Override            
          public void afterTextChanged(Editable s) {                //结果显示在输入框中            }        });

我们一般只要在onTextChanged中,根据s.length()是否大于0就可以完成,可是这里有一个问题,你会发现,你输入的字越多,这个onTextChanged每次执行的次数也就越多,试想一下,如果是几百字,系统怕是要卡死。这怎么办呢。在editText中有一个属性叫inputType,它里面有一个值textNoSuggestions,官方的解释是“不提示”,我们只要设置了这个属性,你再试一次,你每次添加一个字或是删除一个字,editText就只会执行一次了,而不是根据你editText中有多少内容而执行多少次了。代码如下:

        

       editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                  //内容改变前

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                 if(s.length>0)
                {
                    txt_collection_add_ok.setEnabled(true);
                }
                else
                {
                    txt_collection_add_ok.setEnabled(false);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
                //结果显示在输入框中

            }
        });



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值