2010-12-11 39 views
61

Tôi có một TextView trong một nền whos bố trí là một Selector. Và văn bản của TextView được đặt thành Spanned từ HTML. Sau đó, tôi đặt TextView bằng LinkMovementMethod.Làm cách nào để chuyển sự kiện onClick của chế độ xem sang phụ huynh trên Android?

Bây giờ khi tôi nhấn vào TextView, sự kiện nhấp chuột không được gửi đến bố cục gốc để kích hoạt công cụ chọn.

Giải pháp này nên được giải quyết như thế nào?

Trả lời

32

Tôi nghĩ rằng bạn cần phải sử dụng một trong những phương pháp để có thể ngăn chặn sự kiện này trước khi nó được gửi đến các thành phần thích hợp:

Activity.dispatchTouchEvent(MotionEvent) - Điều này cho phép hoạt động của bạn để đánh chặn tất cả các sự kiện liên lạc trước khi họ gửi đến cửa sổ.

ViewGroup.onInterceptTouchEvent(MotionEvent) - Điều này cho phép ViewGroup xem các sự kiện khi chúng được gửi đến Chế độ xem con.

ViewParent.requestDisallowInterceptTouchEvent(boolean) - Gọi nó khi cha mẹ Xem để cho biết rằng nó không được đánh chặn các sự kiện chạm với onInterceptTouchEvent (MotionEvent).

Thông tin thêm here.

Hy vọng điều đó sẽ hữu ích.

+1

Có cách nào dễ dàng hơn để vượt qua các sự kiện để kích hoạt onClick và onLongClick trong chế độ xem gốc hay tôi phải tự triển khai chúng? – shiami

+0

Kiểm tra điều này: http://stackoverflow.com/questions/2136696/pass-event-to-parent-view Có thể bạn muốn thử chuyển cùng một trình nghe nhấp chuột đến các trường hợp khác như được đề xuất, mặc dù tôi không muốn t biết nếu nó sẽ làm việc, nhưng có thể có giá trị một thử. –

+0

Trả lời dưới đây là sạch hơn nhiều – JPM

157

Khai báo TextView của bạn không thể nhấp/lấy nét bằng cách sử dụng android:clickable="false"android:focusable="false" hoặc v.setClickable(false)v.setFocusable(false). Các sự kiện nhấp chuột phải được gửi đến phụ huynh của TextView bây giờ.

Lưu ý:

Để đạt này, bạn cần phải thêm vào để trực tiếp parent của nó. hoặc đặt android:clickable="false"android:focusable="false" cho phụ huynh trực tiếp để chuyển người nghe đến phụ huynh khác.

+1

Oh người đàn ông nếu tôi có thể cung cấp cho này 100 tôi sẽ. Đã cố gắng tìm ra cách để làm cho một nhấp chuột chỉ làm việc trong một ViewPager và không phải trong bố trí bộ điều hợp với TouchImageView thực hiện onTouch! Giải pháp này hoạt động như một sự quyến rũ. – JPM

+0

Hoạt động hoàn hảo. Tốt hơn nhiều so với câu trả lời ngoại trừ. – Rooster242

+0

nhưng nếu tôi muốn xử lý sự kiện thay đổi tập trung của EditText thì sao? –

9

Đôi khi chỉ này giúp:

View child = parent.findViewById(R.id.btnMoreText); 
    child.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      View parent = (View) v.getParent(); 
      parent.performClick(); 
     } 
    }); 

biến thể khác, các công trình không phải lúc nào:

child.setOnClickListener(null); 
4

Đặt

android:duplicateParentState="true" 

trong con sau đó các quan điểm có được trạng thái thể vẽ của nó (tập trung, ép, vv) từ cha mẹ trực tiếp của nó thay vì từ chính nó. bạn có thể đặt onclick cho phụ huynh và nó kêu gọi trẻ em nhấp vào

3

Nếu bạn gặp sự cố về số lần nhấp android:inputType="" từ tệp xml của mình.

+0

Tôi không biết tại sao, nhưng điều này đã làm các trick cho tôi. Cảm ơn bạn! –

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