autolink custom android TextView 클릭 할 때 링크를 만들려면 어떻게해야합니까?




15 Answers

나는 android:autoLink="web" 만을 사용하고 있습니다. 링크를 클릭하면 브라우저가 열리고 올바른 페이지가 표시됩니다.

내가 추측 할 수있는 한 가지는 다른보기가 링크 위에 있다는 것입니다. 투명 한 무언가는 부모 전체를 채우지 만 링크 위에 아무것도 표시하지 않습니다. 이 경우 클릭이 링크 대신이보기로 이동합니다.

android linkify text

나는 다음과 같은 TextView를 정의했다 :

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

여기서 @string/txtCredits<a href="some site">Link text</a> 가 포함 된 문자열 리소스입니다.

Android가 TextView의 링크를 강조 표시하지만 클릭에 응답하지 않습니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 내 Activity에서 TextView를위한 onClickListener를 이렇게 간단하게 설정해야합니까?

내 문자열 리소스를 정의하는 방식과 관련이있는 것 같습니다. 작동하지 않습니다.

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

그러나 이것은 :

<string name="txtCredits">www.google.com</string>

나는 전체 URL을 보여주는 것보다 오히려 텍스트 링크를 보여줄 것이기 때문에 어리석은 짓이다.




위의 해결책은 나를 위해 작동하지 않았지만 다음과 같이했습니다 (그리고 조금 더 깨끗해 보입니다).
먼저 문자열 리소스에서 HTML 엔터티 인코딩을 사용하여 태그 열기 갈매기를 정의하십시오. 예 :

&lt;a href="http://www.google.com">Google&lt;/a>

NOT :

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

일반적으로 문자열의 모든 갈매기를 인코딩합니다. BTW, 링크는 http:// 시작해야합니다 http://

그런 다음 ( here 제안 된대로) TextView에이 옵션을 설정합니다.

 android:linksClickable="true"

마지막으로 코드에서 다음을 수행합니다.

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

그게 다야, regexes 또는 기타 수동 해킹이 필요하지 않습니다.




나는 이것을 간단하게 사용했다.

Linkify.addLinks(TextView, Linkify.ALL);

클릭 가능한 링크를 here




이것이 당신을 도울 것이기를 바랍니다.

String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
    TextView text = (TextView) findViewById(R.id.text);


    text.setText(Html.fromHtml(value));
    text.setMovementMethod(LinkMovementMethod.getInstance());



Richard, 다음 번에 레이아웃 XML에서 TextView 아래에이 코드를 추가해야합니다.

android:autoLink="all"

이것은 이렇게되어야합니다.

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

링크를 클릭 할 수 있도록하려면이 코드 ( t2.setMovementMethod(LinkMovementMethod.getInstance()); )를 사용할 필요가 없습니다.

또한 여기에 진실 : autoLinklinksClickable 을 설정하는 한, 클릭 가능한 링크가 작동하도록 String.xml 파일 에이 태그 를 추가하는 것을 잊지 마십시오.

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



나를 위해 일한 가장 쉬운 방법은 here

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

텍스트 뷰의 텍스트에서 웹 URL을 자동으로 감지합니다.




여기에 문자열과 데이터가 무엇이든 상관없이 textView에서 phone 및 url을 선택할 수있게 해주는 매우 간단한 한 줄짜리 안드로이드 코드가 있습니다. 당신은 이것을 위해 HTML 태그를 사용할 필요가 없습니다.

TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");

// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);



다음은 Android 앱 내에서 텍스트와 하이퍼 링크의 조합을 찾고있는 사용자 모두에게 적합합니다.

string.xml :

<string name="applink">Looking for the regular Zesteve App? 
<a href="https://play.google.com/store/apps/details?id=zesteve.com.myapplication">Get it here</a>
</string>

이제 다음과 같이 주어진 string 에서이 string 을 사용할 수 있습니다.

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

이제 액티비티 또는 프래그먼트에서 다음을 수행하십시오.

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

지금까지는이 방법을 사용하여 android:linksClickable="true" android:autoLink="web" 또는 android:linksClickable="true" 을 설정할 필요가 없습니다.

이 자료가 도움이되기를 바랍니다.




허용되는 답변은 정확하지만 XML에서 자동 링크를 사용할 수 없기 때문에 href 태그가없는 http://google.com 과 같이 전화 번호,지도, 이메일 주소 및 일반 링크를 더 이상 클릭 할 수 없습니다.

내가 찾은 모든 클릭 가능 기능을 갖춘 유일한 솔루션은 다음과 같습니다.

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

TextView에는 android:autolink 가 없어야합니다. android:linksClickable="true" 필요도 없습니다. 기본적으로 사실입니다.




이것을 사용하십시오 ...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

매니페스트 파일에 권한 추가

<uses-permission android:name="android.permission.INTERNET"/>



문제가 발생하는 이유는 "알몸"주소 만 일치 시키려고하기 때문입니다. 'www.google.com'또는 ' http://www.google.com '과 같은

Html.fromHtml() 통해 텍스트를 실행하면 트릭을 수행해야합니다. 당신은 그것을 프로그램 적으로해야만합니다, 그러나 그것은 효과적입니다.




문자열 리소스에 CDATA 추가

Strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>



XML 기반 TextView를 사용하는 경우 요구 사항에 대해 다음 두 가지 작업 만 수행하면됩니다.

  1. 문자열에서 "this is my WebPage"와 같은 링크를 식별하십시오. XML 또는 코드에 추가 할 수 있습니다.

  2. TextView가있는 xml에 다음을 추가합니다.


android:linksClickable="true"

android:autoLink="web"



[Tested in Pre-lollipop as well as in Lollipop and above]

HTML 문자열은 백엔드 또는 리소스 파일에서 가져올 수 있습니다. 텍스트를 리소스 문자열로 사용하는 경우 CDATA 태그를 추가해야합니다.

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

그런 다음 코드에서 문자열을 가져와 HTML로 지정하고 링크 이동 방법을 설정해야합니다.

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}



내 코드는 다음과 같습니다.

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/link"
    android:text="@string/forgot"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:linksClickable="true"/>

내 Java 코드는 다음과 같습니다.

/*TextView action*/
        TextView textView = (TextView) findViewById(R.id.link);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this,forgot.class));
            }
        });  

이것은 단지 다른 활동에 대한 링크를 가리 킵니다. 그러나이 링크는 클릭 할 수 있으며 원활하게 작동합니다. Android Studio 1.5 (미리보기)에서 테스트 됨




Related