一个可以随手势拖动的EditText,点击更改内容,附带解决软键盘遮挡终极方法

源码传送门:https://github.com/xytyl/SwipeEditText/tree/master

惯例先来看效果图

最近产品同学的需求,要求定制一个可拖拽可编辑的文本,原本觉得还挺简单,不就是写个EditText处理一下touch事件么,后来做了发现还有些小坑,记录一下,顺便给大家做个参考。

试错

首先我尝试自定义一个EditText,重写onTouchEvent()方法,在其中做随手势的操作,代码比较简单就不贴了,但是重写之后点击无法唤出软键盘,看了一下在TextView的源码中有关于软键盘的部分,尝试了一下自行唤醒未果,由于开发时间紧张所以没有深入研究,后期会补上,于是换了另一种方式。

实现方法

自定义一个FrameLayout,在里面放一个EditText,触摸事件交给外层FrameLayout处理,这里采用内部拦截法。

首先是父View的onInterceptTouchEvent()方法,用来拦截事件:

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            lastX = (int) ev.getRawX();
            lastY = (int) ev.getRawY();
            return false;
        }
        return true;
    }

然后是EditText的dispatchTouchEvent()方法,内部判断是否需要请求父View不要拦截:

        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            switch
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值