Vô hiệu hóa con trỏ nhấp nháy EditText


Câu trả lời:


355

Bạn có thể sử dụng thuộc tính xml android:cursorVisible="false"hoặc hàm java setCursorVisible(false).


13
Tuyệt vời, cùng với OnClickListener mà làm cho nó có thể nhìn thấy cho hành vi đúng :)
Warpzit

1
@cerin có cách nào để ẩn điểm đánh dấu màu xanh để tôi có thể vô hiệu hóa dán, nhưng giữ con trỏ hiển thị để người dùng sẽ thấy anh ta ở đâu trong trường?
limlim

9
Có thể vô hiệu hóa chỉ nhấp nháy, và không phải con trỏ?
nhà phát triển Android

35

Giải pháp hoàn hảo đi xa hơn đến mục tiêu

Mục tiêu: Vô hiệu hóa con trỏ nhấp nháy khi EditTextkhông được lấy nét và kích hoạt con trỏ nhấp nháy khi EditTextđang ở tiêu cự. Bên dưới cũng mở bàn phím khi EditTextđược nhấp và ẩn bàn phím khi bạn nhấn xong trong bàn phím.

1) Đặt trong xml của bạn dưới EditText:

android:cursorVisible="false"

2) Đặt onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

    public void onClick(View v) 
    {
         if (v.getId() == iEditText.getId()) 
        {
            iEditText.setCursorVisible(true);
        }

    }
};

3) sau đó onCreate, nắm bắt sự kiện khi thực hiện là ép sử dụng OnEditorActionListenerđể bạn EditText, và sau đó setCursorVisible(false).

//onCreate...

iEditText.setOnEditorActionListener(new OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                    iEditText.setCursorVisible(false);
                if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
                }
                return false;
            }
        });

6
KeyEvent.KEYCODE_ENTER sẽ không hoạt động cho tất cả các bàn phím. Bạn sẽ cần đề cập cụ thể đến android: imeOptions = "actionDone" trong bố cục và sau đó xử lý EditorInfo.IME_ACTION_DONE.
PsyGik

Câu trả lời tuyệt vời chỉ nên thay thế khi nhấp bằng cảm ứng vì đôi khi chỉnh sửa lấy nét văn bản mà không cần nhấp chuột nên trong trường hợp này, con trỏ sẽ không được hiển thị
Antwan 18/2/2016

10

Bạn có thể sử dụng mã sau để bật và tắt chỉnh sửa con trỏ văn bản theo chương trình.

Để bật con trỏ

    editText.requestFocus();
    editText.setCursorVisible(true);

Để vô hiệu hóa con trỏ

    editText.setCursorVisible(false);

Sử dụng XML cho phép vô hiệu hóa con trỏ

   android:cursorVisible="false/true"
   android:focusable="false/true"

Để thực hiện chỉnh sửa Có thể chọn (sao chép / cắt / dán / chọn / chọn tất cả)

   editText.setTextIsSelectable(true);

Để tập trung vào chế độ cảm ứng, hãy viết các dòng sau trong XML

  android:focusableInTouchMode="true"
  android:clickable="true"
  android:focusable="true" 

lập trình

  editText.requestFocusFromTouch();

Để xóa tiêu điểm ở chế độ cảm ứng

  editText.clearFocus()

editText.clearF Focus () là những gì tôi đang tìm kiếm. Cảm ơn!! +1
Người dùng

3

Vấn đề với việc đặt chế độ hiển thị con trỏ thành đúng và sai có thể là một vấn đề vì nó loại bỏ con trỏ cho đến khi bạn đặt lại nó một lần nữa và đồng thời trường có thể chỉnh sửa, đó không phải là trải nghiệm người dùng tốt.

vì vậy thay vì sử dụng

setCursorVisible(false)

cứ làm như thế này

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

Đoạn mã trên sẽ loại bỏ tiêu điểm, lần lượt loại bỏ con trỏ. Và kích hoạt nó một lần nữa để bạn có thể chạm vào nó một lần nữa và có thể chỉnh sửa nó. Cũng giống như trải nghiệm người dùng bình thường.


2

Trong trường hợp của tôi, tôi muốn bật / tắt con trỏ khi chỉnh sửa được tập trung.

Trong hoạt động của bạn:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if (v instanceof EditText) {
            EditText edit = ((EditText) v);
            Rect outR = new Rect();
            edit.getGlobalVisibleRect(outR);
            Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
            System.out.print("Is Keyboard? " + isKeyboardOpen);
            if (isKeyboardOpen) {
                System.out.print("Entro al IF");
                edit.clearFocus();
                InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
            }

            edit.setCursorVisible(!isKeyboardOpen);

        }
    }
    return super.dispatchTouchEvent(ev);
}

Khá chắc chắn rằng bạn muốn edit.setCursorVisible(!isKeyboardOpen);để edit.setCursorVisible(isKeyboardOpen);con trỏ hiển thị khi có bàn phím.
Daniel Storm

2

đơn giản thêm dòng này vào bố trí cha mẹ của bạn

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <EditText
        android:inputType="text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

1

Nếu bạn muốn bỏ qua Edittexttừ khi bắt đầu hoạt động, android:focusableandroid:focusableInTouchModesẽ giúp bạn inshallah.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout7" android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true" android:focusableInTouchMode="true">

Điều này LinearLayoutvới của bạn Edittext.


0
  1. Thay đổi trọng tâm sang chế độ xem khác (ví dụ: Bất kỳ chế độ xem văn bản hoặc Linearlayout trong XML) bằng cách sử dụng

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. đặt addTextChangedListener thành edittext trong Activity.

  3. và sau đó được thay đổi sau khi đặt Edittext edittext.clearFocus();

Điều này sẽ cho phép con trỏ khi bàn phím mở và tắt khi bàn phím được đóng.


0

Trong kotlin your_edittext.isCthonVisible = false


Xin vui lòng, định dạng đánh dấu. Bạn có thể làm điều đó bằng cách thụt mã theo 4 khoảng trắng.
Danon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.