Android EditText 屏蔽双击选中、长按选中

这篇具有很好参考价值的文章主要介绍了Android EditText 屏蔽双击选中、长按选中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、代码实现

同时屏蔽双击选中 和 长按选中:

mEditText.setMovementMethod(new BaseMovementMethod());

只屏蔽长按选中:

<EditText
        android:longClickable="false"
        />

二、分析、实现过程

双击或长按都是 Touch事件,所以先看EditText的onTouchEvent方法,EditText中 没有 onTouchEvent方法,而 class EditText extends TextView,所以查看TextView 的 onTouchEvent 方法。

// TextView.java
public boolean onTouchEvent(MotionEvent event) {
        final int action = event.getActionMasked();
        if (mEditor != null) {
            mEditor.onTouchEvent(event);
            ......
            }
// Editor.java
void onTouchEvent(MotionEvent event) {
        final boolean filterOutEvent = shouldFilterOutTouchEvent(event);
        mLastButtonState = event.getButtonState();
        if (filterOutEvent) {
            if (event.getActionMasked() == MotionEvent.ACTION_UP) {
                mDiscardNextActionUp = true;
            }
            return;
        }
        updateTapState(event);
        updateFloatingToolbarVisibility(event);

        // 重点:如果有SelectionController就使用它来处理 event
        if (hasSelectionController()) {
            getSelectionController().onTouchEvent(event); 
        }
class SelectionModifierCursorController implements CursorController {
    public void onTouchEvent(MotionEvent event) {
	    switch (event.getActionMasked()) {
	    	case MotionEvent.ACTION_UP:
                updateSelection(event);

updateSelection() --> updateSelectionInternal() --> Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd);
回到 Editor.java 中,

if (hasSelectionController()) {
    getSelectionController().onTouchEvent(event); 
}

getSelectionController().onTouchEvent(event); 中处理了选中的相关逻辑,也就是不走这行代码,就不会执行选中操作,只要想办法让 hasSelectionController()返回 false 即可。

// Editor.java
boolean hasSelectionController() {
    return mSelectionControllerEnabled;
}

void prepareCursorControllers() {
        mSelectionControllerEnabled = enabled && mTextView.textCanBeSelected();

enable肯定为true,那只有将mTextView.textCanBeSelected() == false

// TextView.java
boolean textCanBeSelected() {
    if (mMovement == null || !mMovement.canSelectArbitrarily()) return false;
    return isTextEditable()
            || (isTextSelectable() && mText instanceof Spannable && isEnabled());
}

return 语句中,isTextEditable() 肯定为true,如果走到了return这句就肯定不行了。
所以只有让程序走到这里去if (mMovement == null || !mMovement.canSelectArbitrarily()) return false;就ok了
看一下 MovementMethod 接口:

public interface MovementMethod {
    /**
     * Returns true if this movement method allows arbitrary selection
     * of any text; false if it has no selection (like a movement method
     * that only scrolls) or a constrained selection (for example
     * limited to links.  The "Select All" menu item is disabled
     * if arbitrary selection is not allowed.
     */
    public boolean canSelectArbitrarily();
}

意思就是,是否允许任意选择文本。

// EditText.java
    @Override
    protected MovementMethod getDefaultMovementMethod() {
        return ArrowKeyMovementMethod.getInstance();
    }

EditText的默认实现是 ArrowKeyMovementMethod 这玩意:

public class ArrowKeyMovementMethod extends BaseMovementMethod implements MovementMethod {
	@Override
    public boolean canSelectArbitrarily() {
        return true;
    }

那只要让canSelectArbitrarily()返回false即可,查看MovementMethod 的实现类后,我们可以使用

public class BaseMovementMethod implements MovementMethod {
    @Override
    public boolean canSelectArbitrarily() {
        return false;
    }

进行替代。
最终,使用 mEditText.setMovementMethod(new BaseMovementMethod()); 解决问题。
实际验证,效果也是OK的,既不能长按也不能双击选择文本。文章来源地址https://www.toymoban.com/news/detail-547229.html

到了这里,关于Android EditText 屏蔽双击选中、长按选中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 之 监听 EditText 的内容变化

    在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见与不可见! 由题可知,是基于监听的事件处理机制,好像前面的点击事件是OnClickListener,文本内容 变化的监听器则是:Te

    2024年02月12日
    浏览(27)
  • Android studio中EditText设置默认值

      如果想对EditText设置默认值,在java代码中使用setText函数是不行的,需要在layout文件中设置“text变量”,如下所示设置默认值为“192.168.1.1”:

    2024年02月11日
    浏览(25)
  • Android开发 文本输入 EditText 监听器

    1.EditText 文本编辑框:用户输入文本信息 可以输入的文本类型如下:  常用属性:  系统默认的EditText: 效果图: 当然也可以自定义EditText的背景,比如用selector设定获取焦点时EditText背景的变化。 selector: 其中focus和nofocus都是自定义的shape,分别表示聚焦和没有聚焦时的背景

    2024年02月12日
    浏览(32)
  • Android EditText关于imeOptions的设置和响应

    日常开发中,最绕不开的一个控件就是EditText,随之避免不了的则是对其软键盘事件的监听,随着需求的不同对用户输入的软键盘要求也不同,有的场景需要用户输入完毕后,有一个确认按钮,有的场景需要的是回车,有的场景需要用户输入后进入下一项或者搜索,所幸的是

    2024年02月20日
    浏览(26)
  • Android点击EditText禁止弹出软键盘

    今天做了一个点击EditText获取焦点,不弹出设备系统键盘,只弹出自定义键盘,在网上能查到很多实现这一功能的方法,试了很多,只有一种对我来说是好用的,做个记录方便以后使用 方法一:这个对我来说好用的,也是唯一一个好用的,还会多分享几个网上说的一些好用的

    2024年02月11日
    浏览(26)
  • android设置EditText内容不可编辑和点击事件

    设置EditText内容不可编辑分两种情况: 二、点击事件 setOnTouchListener:该方法是用于监听用户触摸事件的方法。当用户触摸EditText时,该方法会被触发,并返回一个boolean值,表示是否消耗该事件。通常情况下,我们可以在该方法中实现一些自定义的触摸事件处理逻辑,例如处理

    2024年02月07日
    浏览(36)
  • Android EditText的setOnEditorActionListener方法——监听软键盘按键

    1、控件EditText的setOnEditorActionListener方法的使用 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发。 通过 布局文件 中的imeOptions可以控制软件盘右下角的按钮显示

    2024年02月10日
    浏览(33)
  • Android 基础知识4-3.2 EditText(输入框)详解

    一、EditText(输入框)介绍         EditText在开发中也是经常使用的控件,比如,要实现一个登录页面,需要用户输入账号、密码等信息,然后我们或得用户输入的内容,把它交给服务器来判断。因此,这一节我们需要学习如何在布局文件中实现编辑框,然后获得编辑框的

    2023年04月24日
    浏览(32)
  • Android开发——控件EditText, 2.获取EditText输入的数据,通过按钮点击实现,ImageView控件,缩放类型,控件ProgressBar,常用属性详解,进度条设置

    1. android : hint 输入提示 2. android : textColorHint  输入提示文字的颜色 3. android : inputType  输入类型 4. android : drawableXxxx 在输入框的指定方位添加图片 5. android : drawablePadding  设置图片与输入内容的间距 6. android : paddingxxxx  设置内容与边框的间距 7. android : backgrou

    2024年02月07日
    浏览(35)
  • Android学习笔记 2.3.1 文本框TextView和编辑框EditText的功能和用法

    疯狂Android讲义 第2章 Android 应用的界面编程 2.3 第2组 UI组件:TextView及其子类 “九层之台,起于累土”——无论看上去多么美观的UI界面,开始都是先创建容器(ViewGroup的实例),然后不断地向容器中添加界面组件,最后形成一个美观的UI 界面的。 2.3.1 文本框TextView和编辑框

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包