android textview custom autolink




TextView 클릭 할 때 링크를 만들려면 어떻게해야합니까? (20)

나는 다음과 같은 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을 보여주는 것보다 오히려 텍스트 링크를 보여줄 것이기 때문에 어리석은 짓이다.


API 데모에 묻혀서 내 문제에 대한 해결책을 찾았습니다.

Link.java :

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

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

데모에있는 내용과 일치하도록 TextView에서 대부분의 속성을 제거했습니다.

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

그것으로 해결되었습니다. 밝히기가 꽤 어렵습니다.

중요 : setMovementMethod() 호출하는 경우 autoLink="web" 를 삭제하는 것을 잊지 마십시오.


HTML과 같은 링크를 추가하려면 다음과 같이하면됩니다.

  • HTML과 같은 문자열을 추가하십시오.

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
    
  • 링크 특정 설정이없는 레이아웃에보기를 추가하십시오.

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
    
  • TextView에 프로그래밍 방식으로 적절한 MovementMethod를 추가하십시오.

     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }
    

그게 다야! 예, "autoLink"및 "linksClickable"같은 옵션을 명시 적 링크에서만 작동 (HTML 태그로 래핑되지 않음)하는 것은 나에게 너무 오해의 소지가 있습니다.


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

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

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


android:linksClickable="true"

android:autoLink="web"

xml의 ​​텍스트보기에서 이것을 추가해야하는 것은 무엇입니까?

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>

나는 android:autoLink="web" 를 사용하는 것으로 나타났습니다 android:autoLink="web"

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

URL에 대해서는 정상적으로 작동했지만 링크하고 싶은 전자 메일 주소와 전화 번호가 있었기 때문에이 줄을 사용하여 끝냈습니다 android:autoLink="all"

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

그것은 매력처럼 작동했습니다.


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

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


나는 자동 링크를 사용하여 "자동 밑줄"텍스트를 작성했지만, 단지 그것을 관리하는 "onClick"을 만들었습니다. (나는이 문제에 스스로 직면했다)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

해당 리소스를 관리하는 앱 (IE 브라우저)에 인 텐트를 전달할 때 권한이 필요하지 않습니다.

이것은 나를 위해 일한 것이 었습니다. 행운을 빕니다.


나를 위해 일한 가장 쉬운 방법은 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을 자동으로 감지합니다.


다른 답변을 추가할만한 가치가 있는지 모르겠지만, 경우에 따라 ...

나는 이것을 두 곳에서 사냥해야만했지만 마침내이 버전의 코드를 사용할 수있게되었습니다.

strings.xml :

<string name="name1">&lt;a href="http://www.google.com">link text1&lt;/a></string>
<string name="name2">&lt;a href="http://www.google.com">link text2&lt;/a></string>

myactivity.xml :

<TextView 
    android:id="@+id/textview1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

<TextView 
    android:id="@+id/textview2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

myactivty.java (onCreate ()에서) :

TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);

tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());

이렇게하면 사용자를 Google로 리디렉션하는 텍스트 link text1link text2 와 함께 두 개의 클릭 할 수있는 하이퍼 링크가 만들어집니다.


다음은 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" 을 설정할 필요가 없습니다.

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


문자열 리소스에 CDATA 추가

Strings.xml

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

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

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


여기에 문자열과 데이터가 무엇이든 상관없이 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);

올바른 형식의 HTML 링크 (예 : <a href="http://www.google.com/">Google</a> Html.fromHTML() 에서 setMovementMethod(LinkMovementMethod.getInstance())Html.fromHTML() 을 사용할 때 setAutoLinkMask(Linkify.ALL) <a href="http://www.google.com/">Google</a> ).


이 줄을 TextView 추가했습니다. android:autoLink="web"
다음은 레이아웃 파일의 사용 예입니다.

layout.xml 샘플

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtDefaultpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:[email protected]?Subject=Lost%20Password" target="_top">[email protected]</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>

이것과 함께 시간을 보낸 후에 나는 그것을 발견했다.

  • android:autoLink="web" 는 HTML에 전체 링크가있는 경우 작동합니다. 다음은 파란색으로 강조 표시되고 클릭 할 수 있습니다.
  • <a href="http://www.google.com">http://www.google.com</a> 일부 텍스트
  • 일부 텍스트 http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); 다음과 같이 작동합니다 (강조 표시되고 클릭 가능).
  • <a href="http://www.google.com">http://www.google.com</a> 일부 텍스트
  • 일부 텍스트 http://www.google.com
  • <a href="http://www.google.com">Go to Google</a> 일부 텍스트

세 번째 옵션에는 하이퍼 링크가 있지만 링크 설명 (태그 사이의 부분) 자체는 링크가 아닙니다. android:autoLink="web" 은 그러한 링크와 작동하지 않습니다 .

  • android:autoLink="web" 가 XML에 설정된 경우 view.setMovementMethod(LinkMovementMethod.getInstance()); 재정의합니다 view.setMovementMethod(LinkMovementMethod.getInstance()); (즉, 세 번째 종류의 링크는 강조 표시되지만 클릭 할 수는 없습니다).

이야기의 도덕적 사용은 view.setMovementMethod(LinkMovementMethod.getInstance()); 귀하의 코드에서 android:autoLink="web" 를 XML 레이아웃에 포함시키지 마십시오. 모든 링크를 클릭 할 수있게하려는 경우.


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

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"/>

자동 전화가 작동하지 않습니다. 다음은 매력처럼 작동했습니다.

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());

[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.
}

linkify : Linkify를 사용하면 텍스트와 정규 표현식을 취하여 텍스트의 모든 정규 표현식을 클릭 가능한 링크로 변환합니다.

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

잊지 마라.

import android.widget.TextView;




clickable