记录EditText获取焦点后无法编辑 的解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。

这里写图片描述

在自己开发过程中,由于需求,需要手动的修改手机号码,解决体验,所以遇到了此问题,不算大问题,为了以后方便查找,为他人提供帮助,我决定记录下来,也方便自己,更方便别人。

以下是我尝试了好多解决方案,最终完美的解决的办法,希望网上的各种答案,能够得到此篇文章的综合,减少初学者学习困惑。

我的布局文件

  <EditText
                    android:id="@+id/maintain_order_pay_phone_number"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="8dp"
                    android:layout_weight="1"
                    android:background="@drawable/gray_bg_shape"
                    android:editable="false"
                    android:focusableInTouchMode="false"
                    android:focusable="false"
                    android:padding="3dp"
                    android:text="13452349021"
                    android:textColor="@color/text_color"
                    android:textSize="@dimen/text_size_14" />

最重要的是 在布局文件中,设置

android:editable=”false” android:focusableInTouchMode=”false” android:focusable=”false”

至于它们的作用,

editable是设置是否编辑,而focusableInTouchMode,则是在Touch Mode模式下,获得焦点,focusable是设置控件是否获取的焦点状态

在代码中,通过他们来获得焦点,解决无法编辑:

maintain_order_pay_phone_number.setFocusable(true); maintain_order_pay_phone_number.setEnabled(true); maintain_order_pay_phone_number.requestFocus(); maintain_order_pay_phone_number.setFocusableInTouchMode(true); maintain_order_pay_phone_number.requestFocusFromTouch();

以下是我的代码:

               //获取焦点,解决无法编辑
                maintain_order_pay_phone_number.setFocusable(true);
                maintain_order_pay_phone_number.setEnabled(true);
                maintain_order_pay_phone_number.requestFocus();
                maintain_order_pay_phone_number.setFocusableInTouchMode(true);                
                maintain_order_pay_phone_number.requestFocusFromTouch();
              //限制只能输入手机号码
                maintain_order_pay_phone_number.setInputType(InputType.TYPE_CLASS_PHONE);
                //设置回车检查手机号码的回车监听
                maintain_order_pay_phone_number.setOnEditorActionListener(new        TextView.OnEditorActionListener() {
                  @Override
  public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                        Pattern pattern = Pattern.compile("1[0-9]{10}");
                        Matcher matcher =                  pattern.matcher(maintain_order_pay_phone_number.getText());
                        if (matcher.matches()) {
                            return false;
                        } else {
                            ToastUtil.showGenericToast(me,"手机号码有误,请重新输入");
                            return false;
                        }

                    }
                });
                break;

我的效果图:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣•厚德载物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值