2011-12-27 42 views
90

Tôi đang tạo ClickableSpan và hiển thị đúng cách với văn bản thích hợp được gạch dưới. Tuy nhiên, các nhấp chuột không đăng ký. Bạn có biết tôi đang làm gì sai không ??? Cảm ơn, Victor Dưới đây là đoạn mã:Android ClickableSpan không gọi onClick

view.setText("This is a test");  
ClickableSpan span = new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     log("Clicked"); 
    } 
}; 
view.getText().setSpan(span, 0, view.getText().length(), 
         Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

Trả lời

258

Bạn đã cố gắng thiết lập MovementMethod trên TextView có chứa khoảng? Bạn cần phải làm điều đó để thực hiện công việc nhấp chuột ...

tv.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

Đừng làm việc tốt nếu 'tv' là loại EditText, đúng bạn có thể click vào nhịp nhưng không thể chỉnh sửa này như bình thường. –

+0

cảm ơn rất nhiều! Nó cũng làm việc cho tôi! bạn có thể giải thích cho tôi tại sao về cài đặt này không? –

+0

Cảm ơn, nó đã hoạt động. – Prashant

1

Sau một số thử và sai, trình tự thiết lập tv.setMovementMethod(LinkMovementMethod.getInstance()); không thành vấn đề.

Đây là mã đầy đủ của tôi

String stringTerms = getString(R.string.sign_up_terms); 
Spannable spannable = new SpannableString(stringTerms); 
int indexTermsStart = stringTerms.indexOf("Terms"); 
int indexTermsEnd = indexTermsStart + 18; 
spannable.setSpan(new UnderlineSpan(), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     Log.d(TAG, "TODO onClick.. Terms and Condition"); 
    } 
}, indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

int indexPolicyStart = stringTerms.indexOf("Privacy"); 
int indexPolicyEnd = indexPolicyStart + 14; 
spannable.setSpan(new UnderlineSpan(), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     Log.d(TAG, "TODO onClick.. Privacy Policy"); 
    } 
}, indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

TextView textViewTerms = (TextView) findViewById(R.id.sign_up_terms_text); 
textViewTerms.setText(spannable); 
textViewTerms.setClickable(true); 
textViewTerms.setMovementMethod(LinkMovementMethod.getInstance()); 
Các vấn đề liên quan