2013-01-21 27 views
9

Tôi đang tìm một giải pháp để tắt menu chỉnh sửa báo chí dài (sao chép/dán) và cũng nhấn đúp vào tất cả chức năng cho một hộp văn bản. Tôi đã đọc qua một vài giải pháp ở đây cho vấn đề này trong thời trang tương tự, tuy nhiên, cần phải đi thêm một bước nữa. Đối với ứng dụng này, tôi có yêu cầu ngăn người dùng sử dụng chức năng sao chép/dán trên ứng dụng của tôi và cần cách tắt chức năng này sẽ hoạt động trên 2,3 API cũng như khi được sử dụng trên máy tính bảng mới hơn. Tôi đang thử nghiệm với thiết bị điện thoại NexusOne và Galaxy Tablet. (minSDK là 8, mục tiêu là 10)Android - ngăn sao chép/dán edittext và nhấn đúp chọn tất cả

Hiện tại tôi đang sử dụng (ví dụ): edittextPassword.setLongClickable (sai); -disables menu chỉnh sửa bật lên, Tuyệt vời!

Phương pháp này hoạt động trên thiết bị điện thoại để ngăn cửa sổ bật lên chỉnh sửa menu. Trên máy tính bảng, điều này cũng bị tắt từ hành động nhấn lâu. Tuy nhiên, máy tính bảng có chức năng mới hơn của một lần nhấn đúp sẽ chọn tất cả văn bản và mở menu chỉnh sửa. Có cách nào để API cũ hơn hủy/bẫy/vô hiệu hóa tính năng API mới hơn hoặc ngăn chặn cử chỉ chạm đúp không?


Cập nhật: Sử dụng một sự kết hợp của setLongClickable (false) và setOnTouchListener kết nối với một GestureDetector (cảm ơn bạn Nikola đề nghị) Tôi có thể bẫy/hủy nhấn đúp chuột và chỉnh sửa menu bấm dài từ khai mạc.

Phần tiếp theo để tìm ra là ... trên điện thoại Samsung (Galaxy S, không chắc chắn về các thiết bị khác tại thời điểm này), khi bạn nhấn vào một trường, bạn sẽ có con trỏ và nút con trỏ trỏ nổi (Tên thích hợp??). Nhấp vào nút con trỏ này là một phương pháp khác để mở menu chỉnh sửa. Có ai biết cách tắt cái này không? Cách giải quyết duy nhất của tôi còn lại là xóa Clipboard trên BeforeTextChanges và AfterTextChanges bằng cách sử dụng một TextWatcher. Điều này đảm bảo rằng ngay cả khi bạn truy cập menu Sao chép/Dán, khay nhớ tạm sẽ bị xóa và không có gì để dán.

+0

"Hiện tại tôi đang sử dụng: edittextPassword.setLongClickable (false); -chuyển menu chỉnh sửa bật lên, Tuyệt vời!"- Tôi sẽ ngạc nhiên nếu điều đó hoạt động trên tất cả các thiết bị. Nhiều hơn một nhà sản xuất đã sửa đổi cách' EditText' hoạt động liên quan đến các loại hoạt động này. – CommonsWare

+4

Hãy xem xét người dùng của bạn. Tôi liên tục thất vọng bởi EditTexts cho mật khẩu không cho phép dán vì tôi sử dụng mật khẩu mạnh được tạo ngẫu nhiên (Dashlane) cho tất cả tài khoản của tôi và nhập những tài khoản đó vào một cách khó khăn đến nỗi tôi thường phải thay đổi mật khẩu thành thứ gì đó dễ dàng, nhập mật khẩu, sau đó thay đổi mật khẩu thành mật khẩu mạnh. Nó hút ... – Simon

+1

Sử dụng GestureListener và trả lại đúng mọi lúc có nhấn đúp/nhấn lâu. Nó sẽ ngăn hệ thống phản ứng tương ứng nếu sự kiện không được xử lý. –

Trả lời

1

Về 'nút trỏ con trỏ thả nổi', được gọi là cursor controller, or handle và trình đơn ngữ cảnh xuất hiện khi được nhấp, có, có cách để vô hiệu hóa nó. Tôi giả định rằng bạn đang đề cập đến điều này:

Text selection handle with paste menu

Ngoài các setLongClickable (false) và mã setOnTouchListener, sửa chữa nằm trong việc ngăn ngừa PASTE/REPLACE trình đơn xuất hiện trong phương pháp show() của (không có tài liệu) lớp android.widget.Editor. Trước khi menu xuất hiện, kiểm tra được thực hiện đến if (!canPaste && !canSuggest) return;. Hai phương pháp được sử dụng làm cơ sở để thiết lập các biến này đều trong lớp EditText:

Câu trả lời hoàn chỉnh hơn là available here.

Như @CommonsWare đề cập, nhà sản xuất thiết bị cá nhân có thể đã thay đổi hành vi AOSP mặc định của điều khiển EditText, vì vậy cần kiểm tra.

Các vấn đề liên quan