2012-01-21 1 views
4

, 나는이 두 가지주의 사항과 함께, 내 TextView에 링크를 추가하고 싶습니다 :: 제목이 설명 하듯이 내 코드에 행동을 연결하는 텍스트 뷰의 부분에 "내부"링크를 추가

  • 링크가 TextView의 일부로 작동하기를 원합니다 (HTML의 A 앵커와 같은 것).

  • 링크가 웹 사이트가 아닌 내 코드의 동작을 가리 키기를 원합니다. 내 활동에 메소드를 정의하거나 OnClickListener을 구현하고 해당 링크를 클릭 할 때 메소드를 실행할 수 있습니다.

지금까지 내가 사용하는 전용 외부 링크에 전화 번호, 주소, 웹 사이트 및 이메일을 설정하는 성공 :

Linkify.addLinks(message, Linkify.ALL); 
나는 (내 방법) 내부 링크에 대한 비슷한 싶습니다

, 정의 된 것들을 정의 할 수있다.

내부 링크 및 웹보기가있는 웹 페이지를 사용하는 것은 실제로 옵션이 아닙니다. 이미 여러 개의 복잡한 레이아웃이 정의되어 있으므로 전체 응용 프로그램과 개념을 수정해야하는 것은 상당히 어려울 것입니다 ...

아이디어가 있으십니까?

편집 : Kabuko 여기, 나에게 아주 좋은 솔루션을 준 정확히 나는 그것을 구현하는 방법 : 당신은 실제로 당신이 Html.fromHtml을 사용할 수있는 URL로 가고 싶어하지만, 경우

final TextView descriptionTextView = (TextView) findViewById(R.id.description); 
final Spannable span = Spannable.Factory.getInstance().newSpannable("the full text for the view"); 
span.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     Toast.makeText(StartEventActivity.this, "LINK CLICKED", Toast.LENGTH_SHORT).show(); 
    } 
}, 1, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 1 and 20 to be replaced with actual index of start and end of the desired link 
descriptionTextView.setText(span); 
descriptionTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

답변

3

당신은 당신의 자신을 원하는 경우 클릭 핸들러는 ClickableSpan을 사용할 수 있습니다. 이전 게시물의 완료에

+0

감사합니다 도움이 될 수 있습니다! 나는 그것을 어떻게 놓칠 수 있습니까? 나는 그 계급이 존재한다는 것을 알지 못했다. 그것은 계략을 아주 잘하는 것처럼 보인다. 지금 내가 대답을 수락하기 전에 실험 해보십시오. – Guillaume

+0

완벽하게 작동합니다! 다시 한 번 감사드립니다. - 정확한 구현을 보여주기 위해 제 질문을 수정했습니다. – Guillaume

0

이 어떤 하나

 TextView textView = (TextView) getView().findViewById(R.id.textView); 
     textView.setText(Html.fromHtml(getString(R.string.html_)) , TextView.BufferType.SPANNABLE); 

     String tmp = ((Spannable) textView.getText()).toString(); 
     String linkText = getString(R.string.html_link); 
     int index = tmp.indexOf(linkText); 

     if(index>=0) { 
      Spannable spannable = (Spannable) textView.getText() ; 
      spannable.setSpan(new ClickableSpan() { 
       @Override 
       public void onClick(View widget) { 
        try { 
         /// do what you must 

        }catch (Exception ex){ 
         handleException(ex); 
        } 
       } 
      }, index, index+getString(R.string.html_link).length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      textView.setText(spannable); 
      textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     } 
관련 문제