2011-12-27 3 views
90

ClickableSpan을 만들고 있는데, 밑줄이있는 적절한 텍스트 인 을 올바르게 표시하고 있습니다. 그러나 클릭 수는 등록되지 않습니다. 내가 뭘 잘못하고 있는지 아십니까 ???Android ClickableSpan이 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); 

답변

258

당신이 범위를 포함하는 텍스트 뷰에 MovementMethod 설정을 시도 유무 : 감사합니다, 빅터 다음은 코드는 무엇입니까? 당신은 ... 딸깍 작품을 만들기 위해 몇 가지 시행 착오 후

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

의 사실 당신은 범위를 클릭하지만 정상으로이 편집 할 수 없습니다. –

+0

많은 감사합니다! 나에게도 효과가있다! 이 설정에 대해 이 무엇인지 내게 설명 할 수 있습니까? –

+0

고마워, 효과가 있었다. – Prashant

1

tv.setMovementMethod(LinkMovementMethod.getInstance()); 않는 문제를 설정하는 순서를 그렇게 할 필요가있다.

여기 tv` 유형 글고이다`경우 잘 작동하지 마십시오 내 전체 코드

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()); 
관련 문제