Vấn đề là nếu tôi Linkify textView ScrollView underliyng không lắng nghe các cử chỉ quét Tôi đã setted.Is có một cách để có Linkify mà không rối tung với các cử chỉ của underliyng xem? Tôi cố gắng để ghi đè ontouchEvent và trả về false để ACTION_MOVE nhưng cử chỉ của scrollview cần ACTION_DOWN và ACTION_UP kiện để hoạt động. Có cách nào để đạt được điều đó không?Android TextView Linkify với cha mẹ Xem các cử chỉ
Trả lời
Linkify
áp dụng cho một chuyển độngPhương pháp để xem văn bản LinkMovementMethod
. Phương pháp chuyển động đó nghĩ rằng nó thực hiện một phương pháp cuộn theo chiều dọc nó ghi đè lên bất kỳ phương thức cuộn nào khác mà cha mẹ có. Mặc dù touchEvent
có thể được dispached để phụ huynh, phụ huynh cụ thể ScrollView
cần toàn bộ chuỗi ACTION_DOWN
, ACTION_MOVE
, ACTION_UP
để thực hiện (quét phát hiện).
Vì vậy, giải pháp cho vấn đề của tôi là sau khi Linkify để loại bỏ phương pháp cuộn của textView và xử lý hành động phát hiện liên kết LinkMovementMethod
trong onTouchEvent
của textView.
@override
public boolean onTouchEvent(MotionEvent event) {
TextView widget = (TextView) this;
Object text = widget.getText();
if (text instanceof Spanned) {
Spannable buffer = (Spannable) text;
int action = event.getAction();
if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off,
ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
}
return true;
}
}
}
return false;
}
Bằng cách này tôi có phát hiện Link_Click (chỉ thực hiện với người dùng chạm vào liên kết chứ không phải toàn bộ văn bản) và tôi không có toàn bộ LinkMovementMethod.
@weakwire và @Ridicully câu trả lời là chính xác. Tôi vừa tạo ra một ý chính nhỏ mà bạn có thể tái sử dụng trong dự án của mình.
Đây là liên kết: https://gist.github.com/amilcar-andrade/e4b76840da1dc92febfc
Có một điều nhỏ xấu mà TextView :: setText (...) Phương pháp sử dụng Tự động liên kết cờ,
if (mAutoLinkMask != 0) {
Spannable s2;
if (type == BufferType.EDITABLE || text instanceof Spannable) {
s2 = (Spannable) text;
} else {
s2 = mSpannableFactory.newSpannable(text);
}
if (Linkify.addLinks(s2, mAutoLinkMask)) {
text = s2;
type = (type == BufferType.EDITABLE) ? BufferType.EDITABLE : BufferType.SPANNABLE;
/*
* We must go ahead and set the text before changing the
* movement method, because setMovementMethod() may call
* setText() again to try to upgrade the buffer type.
*/
mText = text;
// Do not change the movement method for text that support text selection as it
// would prevent an arbitrary cursor displacement.
if (mLinksClickable && !textCanBeSelected()) {
setMovementMethod(LinkMovementMethod.getInstance());
}
}
}
Vì vậy, tôi đã dành một thời gian để hiểu , liên kết do tại sao tôi đang vô hiệu hóa trong ListView mục, nhưng công ty không giành một liên kết đôi!
Bạn cần phải thiết lập cờ đó về giá trị cần thiết và sau đó gọi một setText (...)
Đó là một chút không rõ ràng những gì bạn đang nói ở đây. Đây có phải là câu trả lời cho câu hỏi hoặc bạn đang cố hỏi một câu hỏi mới? – SuperBiasedMan
Đó chủ yếu là một lưu ý, vì tôi đã tìm thấy chủ đề này khi tìm kiếm "Linkify textview in ListView" – Mike
- 1. Android: Vượt qua sự kiện cử chỉ để xem một
- 2. Android, cử chỉ trên các tiện ích có thể nhấp
- 3. Cử chỉ trượt và xem web trong Android
- 4. Linkify + textIsSelectable
- 5. Android Linkify cả web và @mentions tất cả trong TextView cùng
- 6. Android NYTimes Vuốt hoạt ảnh/Cử chỉ
- 7. vấn đề cử chỉ với chế độ xem bản đồ trong trang chế độ xem
- 8. Phạm vi dự đoán cử chỉ Android
- 9. WheelView không điền cha mẹ
- 10. Gọi các phương thức lớp cha mẹ
- 11. Cử chỉ dọc và ngang trong Android
- 12. Cách thêm cùng một chế độ xem cho cha mẹ nhiều lần bằng cách tăng nó chỉ một lần
- 13. Phân đoạn cử chỉ trong Android
- 14. Chọn hàng cha mẹ chỉ khi nó không có con
- 15. Xem trong ScrollView không phù hợp với cha mẹ như được cấu hình
- 16. WPF luôn ở trên cùng chỉ dành cho cha mẹ
- 17. Android TextView
- 18. Tắt các cử chỉ trong PagerAdapter/ViewPager
- 19. Chỉ báo tràn văn bản Android TextView?
- 20. Mô phỏng cử chỉ thoát trong Android ActivityInstrumentationTestCase2
- 21. Kế thừa gói Symfony2 mất các gói cha mẹ tuyến
- 22. Cách triển khai cử chỉ mở danh sách Android
- 23. Chức năng cha mẹ PHP không thể xem các thành viên của lớp con
- 24. Bộ chọn cha mẹ jQuery
- 25. Nhận tên lớp cha mẹ?
- 26. Lấy chức năng cha mẹ
- 27. Phần tử XPath chứa thuộc tính và cha mẹ của cha mẹ có thuộc tính khác
- 28. cử chỉ báo chí dài trên ô xem bảng
- 29. Android TextView thay đổi textColor với Theme
- 30. Nối chọn cha mẹ đến cuối với Sass
Một triệu cảm ơn yous cho câu trả lời này. –
Tôi rất vui vì cuối cùng đã giúp một người nào đó: D – weakwire
bạn đời trả lời tuyệt vời! – Maurycy