EditText'ten / Metin'e kopyala / yapıştır nasıl devre dışı bırakılır


131

Uygulamamda, kullanıcının EditTextalana metin kopyalayıp yapıştırmasını istemediğim bir kayıt ekranı var . Kopyala / yapıştır / giriş yöntemini ve diğer seçenekleri gösteren bağlam menüsünün görünmemesi onLongClickListeneriçin her biri için bir tane ayarladım EditText. Bu nedenle, kullanıcı Düzenleme alanlarına kopyalayamayacak / yapıştıramayacaktır.

 OnLongClickListener mOnLongClickListener = new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            // prevent context menu from being popped up, so that user
            // cannot copy/paste from/into any EditText fields.
            return true;
        }
    };

Ancak, kullanıcı Android varsayılanı dışında, kopyalamak / yapıştırmak için bir düğmeye sahip olabilen veya aynı bağlam menüsünü gösterebilen üçüncü taraf bir klavyeyi etkinleştirmişse sorun ortaya çıkar. Peki bu senaryoda kopyala / yapıştır özelliğini nasıl devre dışı bırakırım?

Kopyalama / yapıştırmanın başka yolları olup olmadığını lütfen bana bildirin. (ve muhtemelen bunların nasıl devre dışı bırakılacağı)

Herhangi bir yardım memnuniyetle karşılanacaktır.


"Yapıştır" işlemi bir IME'den geliyorsa, bunu normal tuş vuruşlarından ayırmanın standart bir yolu yoktur. Denenecek bir fikir, her karakterin gelişi arasındaki zamanı ölçmektir ve eğer zaman çok kısaysa, o zaman karakterler bir "yapıştırma" işleminden gelmektedir.
BitBank

kirli çözülme gibi görünüyor! bir göz atmaya değer.
rDroid

1
android'i kullan: longClickable = "false"
Azay Gupta

Yanıtlar:


112

API seviyesi 11 veya üzerini kullanıyorsanız kopyalama, yapıştırma, kesme ve özel bağlam menülerinin görünmesini durdurabilirsiniz.

edittext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public void onDestroyActionMode(ActionMode mode) {                  
            }

            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                return false;
            }
        });

OnCreateActionMode'dan (ActionMode, Menü) false döndürmek, eylem modunun başlatılmasını engeller (Tümünü Seç, Kes, Kopyala ve Yapıştır eylemleri).


1
peki 13'ün altındaki api seviyesi?
Jonathan

1
Her iki yorumu da anlamayın, bu örnek api11 +, pre-api11 çalışıyor IIRC kopyalayıp yapıştırmadı
scottyab

28
Benim için çalışmıyor Mavi imleç göstergesine dokunulduğunda Yapıştır düğmesi görünecektir.
geçersiz

8
Benim için de çalışmıyor. Üzerine çift dokunulduğunda kopyala-yapıştır menüsü gösteriliyor.
Android Killer

bu artık android 6.0'da çalışmıyor, bu cevabı kontrol edin stackoverflow.com/questions/27869983/…
has19

132

En iyi yöntem şunları kullanmaktır:

etUsername.setLongClickable(false);

58
Veya sadece xml olarak android:longClickable="false":)
lomza

19
Mavi imleç göstergesine dokunulduğunda yapıştır düğmesi görünecektir.
geçersiz

16
Bu, görünümün uzun süre tıklanabilir olmasını kesinlikle engelleyecektir, ancak metne çift dokunarak düzenleme kontrolleri de istenebilir, bu da bu çözümün tamamlanmadığı anlamına gelir. Amaçlarınız için bunu aklınızda bulundurun.
Kevin Grant

1
Ayrıca, klavye kısayolları harici klavyelerle çalışmaya devam edebilir (Ctrl + C).
Oleg Vaskevich

Bu, Ice Cream Sandwich'te çalışmaz çünkü pano seçenekleri metne çift dokunarak veya uzun dokunarak açılabilir.
Paul Wintz

44

Bunu, EditText'e uzun basmayı devre dışı bırakarak yapabilirsiniz.

Bunu uygulamak için, xml'ye aşağıdaki satırı eklemeniz yeterlidir -

android:longClickable="false"

6
sorun, uygulama kullanıcımın kopyala ve yapıştır düğmesi olan üçüncü taraf bir klavyeye sahip olmasıydı.
rDroid

3
başka bir sorun da metni çift dokunarak seçebilmeniz ve tekrar kopyala / yapıştır göstermesi
Nikola

37

Kopyala ve yapıştır işlevini aşağıdakilerle devre dışı bırakabiliyorum:

textField.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        return false;
    }

    public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
        return false;
    }

    public boolean onActionItemClicked(ActionMode actionMode, MenuItem item) {
        return false;
    }

    public void onDestroyActionMode(ActionMode actionMode) {
    }
});

textField.setLongClickable(false);
textField.setTextIsSelectable(false);

Umarım sizin için çalışır ;-)


Bu, yukarıdaki diğer cevaplara dayanarak bulduğum çözümün aynısı. Başkalarının yapamaz kenar davalarına bakan beri bu doğru çözüm olarak işaretlenmesi gereken
Andrew Hoefling

2
Bu seçenek kopyayı engeller, ancak yine de imleci tıklayarak yapıştırabilirsiniz.
Mehul Kanzariya

12

tüm sürümlerde editText çalışmasının kopyalayıp yapıştırmasını devre dışı bırakmanın en iyi yolu burada

if (android.os.Build.VERSION.SDK_INT < 11) {
        editText.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v,
                    ContextMenuInfo menuInfo) {
                // TODO Auto-generated method stub
                menu.clear();
            }
        });
    } else {
        editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                // TODO Auto-generated method stub
                return false;
            }

            public void onDestroyActionMode(ActionMode mode) {
                // TODO Auto-generated method stub

            }

            public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                // TODO Auto-generated method stub
                return false;
            }

            public boolean onActionItemClicked(ActionMode mode,
                    MenuItem item) {
                // TODO Auto-generated method stub
                return false;
            }
        });
    }

Bu benim için çalıştı, sadece @TargetApi (Build.VERSION_CODES.HONEYCOMB)
Sheepdogsheep

11

SetCustomSelectionActionModeCallback'e ve devre dışı bırakılan uzun tıklama çözümlerine ek olarak, aşağıdaki görüntüye göre metin seçim tutamacına tıklandığında YAPIŞTIR / DEĞİŞTİR menülerinin görünmesini engellemek gerekir :

Yapıştır menüsü ile metin seçim tutamacı

Çözüm show(), (belgelenmemiş) android.widget.Editorsınıfın yönteminde YAPIŞTIR / DEĞİŞTİR menüsünün görünmesini önlemede yatmaktadır . Menü görünmeden önce, bir kontrol yapılır if (!canPaste && !canSuggest) return;. Bu değişkenleri ayarlamak için temel olarak kullanılan iki yöntem de EditTextsınıfın içindedir:

Daha eksiksiz bir cevap burada mevcuttur .


Bu DOĞRU ve TAM çözüm
FireZenk

Bazı cihazlarda Panoya Yapıştır seçeneği görünebilir, yalnızca yapıştırma işlevi görür. Bağlantıları kontrol ettim ama yapıştırmayı önleyebiliyorum ama panoya değil. Herhangi bir fikir ?
Richa

11

Kotlin çözümü:

fun TextView.disableCopyPaste() {
    isLongClickable = false
    setTextIsSelectable(false)
    customSelectionActionModeCallback = object : ActionMode.Callback {
        override fun onCreateActionMode(mode: ActionMode?, menu: Menu): Boolean {
            return false
        }

        override fun onPrepareActionMode(mode: ActionMode?, menu: Menu): Boolean {
            return false
        }

        override fun onActionItemClicked(mode: ActionMode?, item: MenuItem): Boolean {
            return false
        }

        override fun onDestroyActionMode(mode: ActionMode?) {}
    }
}

O zaman bu yöntemi basitçe şu adresten çağırabilirsiniz TextView:

override fun onCreate() {
    priceEditText.disableCopyPaste()
}

1
Merhaba, bu yaklaşımı kullanıyorum, ancak bu bölümde Type mismatchbu açıklamada hata alıyorum . Neden işe yaramadığına dair bir fikriniz var mı? Required:ActionMode.Callback! Found: object: ActionMode.Callback
Abdul Mateen

8

Diğer çözümleri kullanarak, API 26 (Oreo), girilen metne tek dokunuşla imleç tutacağını göstermeye devam ediyordu ve ardından menü gösterilebilir. Yalnızca çözümlerin kombinasyonu sorunumu çözebilir.

public class CustomEditText extends EditText {

    public CustomEditText(Context context) {
        super(context);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        this.setCustomSelectionActionModeCallback(new BlockedActionModeCallback());
        this.setLongClickable(false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            this.setInsertionDisabled();
        }
        return super.onTouchEvent(event);
    }

    /**
    * This method sets TextView#Editor#mInsertionControllerEnabled field to false
    * to return false from the Editor#hasInsertionController() method to PREVENT showing
    * of the insertionController from EditText
    * The Editor#hasInsertionController() method is called in  Editor#onTouchUpEvent(MotionEvent event) method.
    */
    private void setInsertionDisabled() {
        try {
            Field editorField = TextView.class.getDeclaredField("mEditor");
            editorField.setAccessible(true);
            Object editorObject = editorField.get(this);

            Class editorClass = Class.forName("android.widget.Editor");
            Field mInsertionControllerEnabledField = editorClass.getDeclaredField("mInsertionControllerEnabled");
            mInsertionControllerEnabledField.setAccessible(true);
            mInsertionControllerEnabledField.set(editorObject, false);
        }
        catch (Exception ignored) {
            // ignore exception here
        }
    }

    @Override
    public boolean isSuggestionsEnabled() {
        return false;
    }

    private class BlockedActionModeCallback implements ActionMode.Callback {
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        public void onDestroyActionMode(ActionMode mode) {
        }
    }
}

5

Uzun tıklamada bazı işlevler gerçekleştirmeniz gerektiğinden uzun tıklamayı devre dışı bırakmak istemiyorsanız, true döndürmektense bunu yapmak daha iyi bir seçenektir.

Edittext uzun tıklamanız böyle olacaktır.

edittext.setOnLongClickListener(new View.OnLongClickListener() {
      @Override
      public boolean onLongClick(View v) {
            //  Do Something or Don't
            return true;
      }
});

Gereğince belgeleri "Gerçek" Dönen gerek varsayılan işlemleri gerçekleştirmek için böylece uzun tıklama ele alınmıştır gösterecektir.

Bunu API seviyesi 16, 22 ve 25'te test ettim. Benim için iyi çalışıyor. Umarım bu yardımcı olur.


1
İyi bir. Alternatif olarak, sadece android:longClickable="false"XML olarak ayarlayın
Alex Semeniuk


3

İşte "yapıştır" açılır penceresini devre dışı bırakmak için bir hack. EditTextYöntemi geçersiz kılmalısınız:

@Override
public int getSelectionStart() {
    for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
        if (element.getMethodName().equals("canPaste")) {
            return -1;
        }
    }
    return super.getSelectionStart();
}

Diğer eylemler için de aynı şey yapılabilir.


Pano devre dışı
Richa

3

Bu çözümü test ettim ve işe yarıyor

    mSubdomainEditText.setLongClickable(false);
    mSubdomainEditText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

      public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
      }

      public void onDestroyActionMode(ActionMode mode) {
      }

      public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        return false;
      }

      public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return false;
      }
    });

1

Panoyu okuyun, girişi ve girişin "yazıldığı" zamanı kontrol edin. Pano aynı metne sahipse ve çok hızlıysa, yapıştırılan girişi silin.


1

@Zain Ali, cevabınız API 11 üzerinde çalışıyor. Sadece API 10'da da yapmak için bir yol önermek istedim. Proje API'mi o sürümde tutmam gerektiğinden, sürekli olarak 2.3.3'te bulunan işlevlerle oynuyordum ve bunu yapma olanağım vardı. Aşağıdaki pasajı paylaştım. Kodu test ettim ve benim için çalışıyordu. Bu pasajı acil olarak yaptım. Yapılabilecek herhangi bir değişiklik varsa kodu geliştirmekten çekinmeyin ..

// A custom TouchListener is being implemented which will clear out the focus 
// and gain the focus for the EditText, in few milliseconds so the selection 
// will be cleared and hence the copy paste option wil not pop up.
// the respective EditText should be set with this listener 
// tmpEditText.setOnTouchListener(new MyTouchListener(tmpEditText, tmpImm));

public class MyTouchListener implements View.OnTouchListener {

    long click = 0;
    EditText mEtView;
    InputMethodManager imm;

    public MyTouchListener(EditText etView, InputMethodManager im) {
        mEtView = etView;
        imm = im;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            long curr = System.currentTimeMillis();
            if (click !=0 && ( curr - click) < 30) {

                mEtView.setSelected(false);
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mEtView.setSelected(true);
                        mEtView.requestFocusFromTouch();
                        imm.showSoftInput(mEtView, InputMethodManager.RESULT_SHOWN);
                    }
                },25);

            return true;
            }
            else {
                if (click == 0)
                    click = curr;
                else
                    click = 0;
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mEtView.requestFocusFromTouch();
                        mEtView.requestFocusFromTouch();
                        imm.showSoftInput(mEtView, InputMethodManager.RESULT_SHOWN);
                    }
                },25);
            return true;
            }

        } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            mEtView.setSelected(false);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    mEtView.setSelected(true);
                    mEtView.requestFocusFromTouch();
                    mEtView.requestFocusFromTouch();
                    imm.showSoftInput(mEtView, InputMethodManager.RESULT_SHOWN);
                }
            },25);
            return true;
        }
        return false;
    }

1

çözüm çok basit

public class MainActivity extends AppCompatActivity {

EditText et_0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    et_0 = findViewById(R.id.et_0);

    et_0.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            //to keep the text selection capability available ( selection cursor)
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            //to prevent the menu from appearing
            menu.clear();
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {

        }
    });
   }
}

--------> önizleme <---------


1

Prevant kopyala ve yapıştır için aşağıdaki custome sınıfını deneyin Edittext

public class SegoeUiEditText extends AppCompatEditText {
private final Context context;


@Override
public boolean isSuggestionsEnabled() {
    return false;
}
public SegoeUiEditText(Context context) {
    super(context);
    this.context = context;
    init();
}

public SegoeUiEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.context = context;
    init();
}

public SegoeUiEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    this.context = context;
    init();
}


private void setFonts(Context context) {
    this.setTypeface(Typeface.createFromAsset(context.getAssets(), "Fonts/Helvetica-Normal.ttf"));
}

private void init() {

        setTextIsSelectable(false);
        this.setCustomSelectionActionModeCallback(new ActionModeCallbackInterceptor());
        this.setLongClickable(false);

}
@Override
public int getSelectionStart() {

    for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
        if (element.getMethodName().equals("canPaste")) {
            return -1;
        }
    }
    return super.getSelectionStart();
}
/**
 * Prevents the action bar (top horizontal bar with cut, copy, paste, etc.) from appearing
 * by intercepting the callback that would cause it to be created, and returning false.
 */
private class ActionModeCallbackInterceptor implements ActionMode.Callback, android.view.ActionMode.Callback {
    private final String TAG = SegoeUiEditText.class.getSimpleName();

    public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; }
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; }
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; }
    public void onDestroyActionMode(ActionMode mode) {}

    @Override
    public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
        menu.clear();
        return false;
    }

    @Override
    public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
        return false;
    }

    @Override
    public void onDestroyActionMode(android.view.ActionMode mode) {

    }
}

}


1

Panoya sahip akıllı telefon için böyle bir önlem almak mümkündür.

editText.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (source.length() > 1) {
                return "";
            }  return null;
        }
    }});


0

İstenmeyen karakterlerin girilmesini önlemek için bir giriş filtresi oluşturduğunuzda, bu tür karakterleri düzenleme metnine yapıştırmanın hiçbir etkisi olmadığını gördüm. Yani bu benim sorunumu da çözüyor.



0

Benim için işe yarayan çözüm, özel Edittext oluşturmak ve aşağıdaki yöntemi geçersiz kılmaktı:

public class MyEditText extends EditText {

private int mPreviousCursorPosition;

@Override
protected void onSelectionChanged(int selStart, int selEnd) {
    CharSequence text = getText();
    if (text != null) {
        if (selStart != selEnd) {
            setSelection(mPreviousCursorPosition, mPreviousCursorPosition);
            return;
        }
    }
    mPreviousCursorPosition = selStart;
    super.onSelectionChanged(selStart, selEnd);
}

}


0

Kullanmaya çalışmak.

myEditext.setCursorVisible(false);

       myEditext.setCustomSelectionActionModeCallback(new ActionMode.Callback() {

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            return false;
        }

        public void onDestroyActionMode(ActionMode mode) {
            // TODO Auto-generated method stub

        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            return false;
        }

        public boolean onActionItemClicked(ActionMode mode,
                MenuItem item) {
            // TODO Auto-generated method stub
            return false;
        }
    });

0

Kotlin'de bir çözüm arayanlar, aşağıdaki sınıfı özel bir widget olarak kullanır ve xml'de kullanır.

class SecureEditText: TextInputEditText {

/** This is a replacement method for the base TextView class' method of the same name. This method
 * is used in hidden class android.widget.Editor to determine whether the PASTE/REPLACE popup
 * appears when triggered from the text insertion handle. Returning false forces this window
 * to never appear.
 * @return false
 */
override fun isSuggestionsEnabled(): Boolean {
    return false
}

override fun getSelectionStart(): Int {
    for (element in Thread.currentThread().stackTrace) {
        if (element.methodName == "canPaste") {
            return -1
        }
    }
    return super.getSelectionStart()
}

public override fun onSelectionChanged(start: Int, end: Int) {

    val text = text
    if (text != null) {
        if (start != text.length || end != text.length) {
            setSelection(text.length, text.length)
            return
        }
    }

    super.onSelectionChanged(start, end)
}

companion object {
    private val EDITTEXT_ATTRIBUTE_COPY_AND_PASTE = "isCopyPasteDisabled"
    private val PACKAGE_NAME = "http://schemas.android.com/apk/res-auto"
}

constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
    disableCopyAndPaste(context, attrs)
}

/**
 * Disable Copy and Paste functionality on EditText
 *
 * @param context Context object
 * @param attrs   AttributeSet Object
 */
private fun disableCopyAndPaste(context: Context, attrs: AttributeSet) {
    val isDisableCopyAndPaste = attrs.getAttributeBooleanValue(
        PACKAGE_NAME,
        EDITTEXT_ATTRIBUTE_COPY_AND_PASTE, true
    )
    if (isDisableCopyAndPaste && !isInEditMode()) {
        val inputMethodManager =
            context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        this.setLongClickable(false)
        this.setOnTouchListener(BlockContextMenuTouchListener(inputMethodManager))
    }
}

/**
 * Perform Focus Enabling Task to the widget with the help of handler object
 * with some delay
 * @param inputMethodManager is used to show the key board
 */
private fun performHandlerAction(inputMethodManager: InputMethodManager) {
    val postDelayedIntervalTime: Long = 25
    Handler().postDelayed(Runnable {
        this@SecureEditText.setSelected(true)
        this@SecureEditText.requestFocusFromTouch()
        inputMethodManager.showSoftInput(
            this@SecureEditText,
            InputMethodManager.RESULT_SHOWN
        )
    }, postDelayedIntervalTime)
}

/**
 * Class to Block Context Menu on double Tap
 * A custom TouchListener is being implemented which will clear out the focus
 * and gain the focus for the EditText, in few milliseconds so the selection
 * will be cleared and hence the copy paste option wil not pop up.
 * the respective EditText should be set with this listener
 *
 * @param inputMethodManager is used to show the key board
 */
private inner class BlockContextMenuTouchListener internal constructor(private val inputMethodManager: InputMethodManager) :
    View.OnTouchListener {
    private var lastTapTime: Long = 0
    val TIME_INTERVAL_BETWEEN_DOUBLE_TAP = 30
    override fun onTouch(v: View, event: MotionEvent): Boolean {
        if (event.getAction() === MotionEvent.ACTION_DOWN) {
            val currentTapTime = System.currentTimeMillis()
            if (lastTapTime != 0L && currentTapTime - lastTapTime < TIME_INTERVAL_BETWEEN_DOUBLE_TAP) {
                this@SecureEditText.setSelected(false)
                performHandlerAction(inputMethodManager)
                return true
            } else {
                if (lastTapTime == 0L) {
                    lastTapTime = currentTapTime
                } else {
                    lastTapTime = 0
                }
                performHandlerAction(inputMethodManager)
                return true
            }
        } else if (event.getAction() === MotionEvent.ACTION_MOVE) {
            this@SecureEditText.setSelected(false)
            performHandlerAction(inputMethodManager)
        }
        return false
    }
}

}


0

i ekledi Uzatma Fonksiyonu içinde Kotlin dili:

fun EditText.disableTextSelection() {
    this.setCustomSelectionActionModeCallback(object : android.view.ActionMode.Callback {
        override fun onActionItemClicked(mode: android.view.ActionMode?, item: MenuItem?): Boolean {
            return false
        }
        override fun onCreateActionMode(mode: android.view.ActionMode?, menu: Menu?): Boolean {
            return false
        }
        override fun onPrepareActionMode(mode: android.view.ActionMode?, menu: Menu?): Boolean {
            return false
        }
        override fun onDestroyActionMode(mode: android.view.ActionMode?) {
        }
    })
}

bunu şu şekilde kullanabilirsiniz:

edit_text.disableTextSelection()

xml'nizde aşağıdaki satıra da eklendi:

                android:longClickable="false"
                android:textIsSelectable="false"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.