欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

VIVO手机上del键无效OnKeyListener不响应的原因及解决方法

程序员文章站 2024-02-18 13:13:28
在修改交易密码界面用到一个自定义输入框 类似这种(原谅丑了点~) 结果昨天有用户反馈在vivo手机上回出现,del键无效的问题~~~ 最后发现是:editext的on...

在修改交易密码界面用到一个自定义输入框

类似这种(原谅丑了点~)

结果昨天有用户反馈在vivo手机上回出现,del键无效的问题~~~

最后发现是:editext的onkeylistener没有响应。

最后搜搜了一下,找到了解决方案:重写editextview的inputconnectionwrapper的方法后解决了问题:

代码如下:

public class zanyedittext extends edittext {
  private ondelkeyeventlistener delkeyeventlistener;
  public zanyedittext(context context, attributeset attrs, int defstyle) {
    super(context, attrs, defstyle);
  }
  public zanyedittext(context context, attributeset attrs) {
    super(context, attrs);
  }
  public zanyedittext(context context) {
    super(context);
  }
  @override
  public inputconnection oncreateinputconnection(editorinfo outattrs) {
    return new zanyinputconnection(super.oncreateinputconnection(outattrs),
        true);
  }
  private class zanyinputconnection extends inputconnectionwrapper {
    public zanyinputconnection(inputconnection target, boolean mutable) {
      super(target, mutable);
    }
    @override
    public boolean sendkeyevent(keyevent event) {
      if (event.getaction() == keyevent.action_down
          && event.getkeycode() == keyevent.keycode_del) {
        if (delkeyeventlistener != null) {
          delkeyeventlistener.ondeleteclick();
          return true;
        }
      }
      return super.sendkeyevent(event);
    }
    @override
    public boolean deletesurroundingtext(int beforelength, int afterlength) {
      if (beforelength == 1 && afterlength == 0) {
        return sendkeyevent(new keyevent(keyevent.action_down,
            keyevent.keycode_del))
            && sendkeyevent(new keyevent(keyevent.action_up,
            keyevent.keycode_del));
      }
      return super.deletesurroundingtext(beforelength, afterlength);
    }
  }
  /**
   *
   * 功能描述: <br>
   * 〈功能详细描述〉
   *
   * @param delkeyeventlistener edittext删除回调
   */
  public void setdelkeyeventlistener(ondelkeyeventlistener delkeyeventlistener) {
    this.delkeyeventlistener = delkeyeventlistener;
  }
  public interface ondelkeyeventlistener {
    void ondeleteclick();
  }
}

参考:

以上所述是小编给大家介绍的vivo手机上del键无效onkeylistener不响应的原因及解决方法,希望对大家有所帮助