国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android EditText 屏蔽雙擊選中、長按選中

這篇具有很好參考價值的文章主要介紹了Android EditText 屏蔽雙擊選中、長按選中。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、代碼實現(xiàn)

同時屏蔽雙擊選中 和 長按選中:

mEditText.setMovementMethod(new BaseMovementMethod());

只屏蔽長按選中:

<EditText
        android:longClickable="false"
        />

二、分析、實現(xiàn)過程

雙擊或長按都是 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); 中處理了選中的相關(guān)邏輯,也就是不走這行代碼,就不會執(zhí)行選中操作,只要想辦法讓 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的默認實現(xiàn)是 ArrowKeyMovementMethod 這玩意:

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

那只要讓canSelectArbitrarily()返回false即可,查看MovementMethod 的實現(xiàn)類后,我們可以使用

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

進行替代。
最終,使用 mEditText.setMovementMethod(new BaseMovementMethod()); 解決問題。
實際驗證,效果也是OK的,既不能長按也不能雙擊選擇文本。文章來源地址http://www.zghlxwxcb.cn/news/detail-547229.html

到了這里,關(guān)于Android EditText 屏蔽雙擊選中、長按選中的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android 之 監(jiān)聽 EditText 的內(nèi)容變化

    Android 之 監(jiān)聽 EditText 的內(nèi)容變化

    在前面我們已經(jīng)學過EditText控件了,本節(jié)來說下如何監(jiān)聽輸入框的內(nèi)容變化! 這個再實際開發(fā)中非常實用,另外,附帶著說下如何實現(xiàn)EditText的密碼可見與不可見! 由題可知,是基于監(jiān)聽的事件處理機制,好像前面的點擊事件是OnClickListener,文本內(nèi)容 變化的監(jiān)聽器則是:Te

    2024年02月12日
    瀏覽(20)
  • Android開發(fā) 文本輸入 EditText 監(jiān)聽器

    Android開發(fā) 文本輸入 EditText 監(jiān)聽器

    1.EditText 文本編輯框:用戶輸入文本信息 可以輸入的文本類型如下:? 常用屬性: ?系統(tǒng)默認的EditText: 效果圖: 當然也可以自定義EditText的背景,比如用selector設(shè)定獲取焦點時EditText背景的變化。 selector: 其中focus和nofocus都是自定義的shape,分別表示聚焦和沒有聚焦時的背景

    2024年02月12日
    瀏覽(20)
  • Android studio中EditText設(shè)置默認值

    ??如果想對EditText設(shè)置默認值,在java代碼中使用setText函數(shù)是不行的,需要在layout文件中設(shè)置“text變量”,如下所示設(shè)置默認值為“192.168.1.1”:

    2024年02月11日
    瀏覽(24)
  • Android EditText關(guān)于imeOptions的設(shè)置和響應

    Android EditText關(guān)于imeOptions的設(shè)置和響應

    日常開發(fā)中,最繞不開的一個控件就是EditText,隨之避免不了的則是對其軟鍵盤事件的監(jiān)聽,隨著需求的不同對用戶輸入的軟鍵盤要求也不同,有的場景需要用戶輸入完畢后,有一個確認按鈕,有的場景需要的是回車,有的場景需要用戶輸入后進入下一項或者搜索,所幸的是

    2024年02月20日
    瀏覽(21)
  • android設(shè)置EditText內(nèi)容不可編輯和點擊事件

    設(shè)置EditText內(nèi)容不可編輯分兩種情況: 二、點擊事件 setOnTouchListener:該方法是用于監(jiān)聽用戶觸摸事件的方法。當用戶觸摸EditText時,該方法會被觸發(fā),并返回一個boolean值,表示是否消耗該事件。通常情況下,我們可以在該方法中實現(xiàn)一些自定義的觸摸事件處理邏輯,例如處理

    2024年02月07日
    瀏覽(28)
  • Android點擊EditText禁止彈出軟鍵盤

    今天做了一個點擊EditText獲取焦點,不彈出設(shè)備系統(tǒng)鍵盤,只彈出自定義鍵盤,在網(wǎng)上能查到很多實現(xiàn)這一功能的方法,試了很多,只有一種對我來說是好用的,做個記錄方便以后使用 方法一:這個對我來說好用的,也是唯一一個好用的,還會多分享幾個網(wǎng)上說的一些好用的

    2024年02月11日
    瀏覽(22)
  • Android EditText的setOnEditorActionListener方法——監(jiān)聽軟鍵盤按鍵

    1、控件EditText的setOnEditorActionListener方法的使用 setOnEditorActionListener這個方法,并不是在我們點擊EditText的時候觸發(fā),也不是在我們對EditText進行編輯時觸發(fā),而是在我們編輯完之后點擊軟鍵盤上的各種鍵才會觸發(fā)。 通過 布局文件 中的imeOptions可以控制軟件盤右下角的按鈕顯示

    2024年02月10日
    瀏覽(17)
  • Android 基礎(chǔ)知識4-3.2 EditText(輸入框)詳解

    一、EditText(輸入框)介紹 ????????EditText在開發(fā)中也是經(jīng)常使用的控件,比如,要實現(xiàn)一個登錄頁面,需要用戶輸入賬號、密碼等信息,然后我們或得用戶輸入的內(nèi)容,把它交給服務(wù)器來判斷。因此,這一節(jié)我們需要學習如何在布局文件中實現(xiàn)編輯框,然后獲得編輯框的

    2023年04月24日
    瀏覽(22)
  • Android開發(fā)——控件EditText, 2.獲取EditText輸入的數(shù)據(jù),通過按鈕點擊實現(xiàn),ImageView控件,縮放類型,控件ProgressBar,常用屬性詳解,進度條設(shè)置

    Android開發(fā)——控件EditText, 2.獲取EditText輸入的數(shù)據(jù),通過按鈕點擊實現(xiàn),ImageView控件,縮放類型,控件ProgressBar,常用屬性詳解,進度條設(shè)置

    1.?android?:?hint 輸入提示 2.?android?:?textColorHint ?輸入提示文字的顏色 3.?android?:?inputType ?輸入類型 4.?android?:?drawableXxxx 在輸入框的指定方位添加圖片 5.?android?:?drawablePadding ?設(shè)置圖片與輸入內(nèi)容的間距 6.?android?:?paddingxxxx ?設(shè)置內(nèi)容與邊框的間距 7.?android?:?backgrou

    2024年02月07日
    瀏覽(24)
  • Android學習筆記 2.3.1 文本框TextView和編輯框EditText的功能和用法

    Android學習筆記 2.3.1 文本框TextView和編輯框EditText的功能和用法

    瘋狂Android講義 第2章 Android 應用的界面編程 2.3 第2組 UI組件:TextView及其子類 “九層之臺,起于累土”——無論看上去多么美觀的UI界面,開始都是先創(chuàng)建容器(ViewGroup的實例),然后不斷地向容器中添加界面組件,最后形成一個美觀的UI 界面的。 2.3.1 文本框TextView和編輯框

    2024年02月06日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包