2014-10-02 2 views
0

TextView에는 2 가지 유형의 링크가 필요합니다.두 가지 유형의 링크를 TextView에서 탭핑 할 수있게 만들기


첫 번째 유형은 텍스트로 입력 된 주소입니다.

예 :

http://www.google.com


번째 유형은 HTML 하이퍼 링크이다.

예 :

Google


내가 TextView's 이동 방법을 설정하고 HTML 개체를 사용하여 타입 2를 달성 할 수

<a href="http://www.google.com">Google</a>

다음과 같이 나타날 것이다 .

예 : '. 웹 "

holder.txtMyText.setMovementMethod(LinkMovementMethod.getInstance()); 
holder.txtMyText.setText(Html.fromHtml(items.get(position).getText())); 

I가하기 TextView'sautoLink 매개 변수를 설정하여 제 1 형을 달성 할

예 :

android:autoLink="web"


문제 :

나는 "웹"는 HTML의 하이퍼 링크를 나누기 위해 TextView'sautoLink 매개 변수를 설정합니다. 그들은 일반 텍스트로 나타나며 탭핑 할 수 없습니다. autoLink 매개 변수를 제거하면 입력 한 주소를 더 이상 사용할 수 없습니다.

어떻게 둘 다 작동합니까?정규 표현식 다음 사용

+1

당신은'Html.fromHtml()'의 출력에 대해 수동으로'Linkify'를 시도 할 수 있습니다. 또는 노출 URL을 표시 할 목적으로'' 태그에 넣으십시오. – CommonsWare

+0

이것은 Linkify.addLinks()가 이미 Spannable 객체에있는 모든 URLSpan을 제거하기 때문입니다 (http://androidxref.com/4.4_r1/xref/frameworks/base/core/java/android/text/util/Linkify.java 참조). # 204) – pskink

답변

1

는 일 :

// Match any set of characters starting with `http` but not in `<a></a>` tag 
static final String REGEX = "(?!<a[^>]*?>)(http[^\\s]+)(?![^<]*?</a>)"; 

예 :

문자열 :

<string name="lorem_ipsum"> 
    Lorem ipsum dolor sit amet <a href="http://www.google.com">Google</a> eirmod tempor. 
    \n\n\n\n\n\n 
    At vero eos et accusam et justo duo dolores et ea rebum http://www.google.com clita kasd sed. 
</string> 

레이아웃 :

<TextView 
    android:id="@+id/lorem_ipsum" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/lorem_ipsum" /> 

활동

TextView tv = (TextView)findViewById(R.id.lorem_ipsum); 
Linkify.addLinks(tv, Pattern.compile(REGEX), "http://"); 

결과 :이 도움이

Screenshot

희망.

+1

고마워요! 이것은 작동하지만, ''태그를 클릭 할 수있는 링크에는'tv.setMovementMethod (LinkMovementMethod.getInstance())'가 필요하다는 것을 언급해야합니다. – Andrew

관련 문제