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



Answers

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

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

Question

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




이것은 TextView에서 클릭 가능한 링크와 보이는 링크를 해결하는 방법입니다 (코드 별).

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }



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

<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 (미리보기)에서 테스트 됨




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

Linkify.addLinks(TextView, Linkify.ALL);

클릭 가능한 링크를 here




당신은 이것 만 필요합니다 :

android:autoLink="web"

이 선을 TextView에 삽입하십시오.이 선은 웹을 참조하여 클릭 할 수 있습니다. 이 TextView의 텍스트로 설정된 URL 주소입니다.

예:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />



그냥 getString (R.string.whatever) 대신 getText (R.string.whatever)를 사용해야한다는 것을 알아 내는데 너무 많은 시간을 낭비했습니다 ...

어쨌든, 여기 내가 어떻게 일하는거야. 같은 텍스트보기에서 여러 개의 하이퍼 링크를 사용합니다.

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

문자열 예제

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</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 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());



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

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



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

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




나는 자동 링크를 사용하여 "자동 밑줄"텍스트를 작성했지만, 단지 그것을 관리하는 "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 브라우저)에 인 텐트를 전달할 때 권한이 필요하지 않습니다.

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




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>



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

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

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 와 함께 두 개의 클릭 할 수있는 하이퍼 링크가 만들어집니다.




여기에 문자열과 데이터가 무엇이든 상관없이 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 엔터티 인코딩을 사용하여 태그 열기 갈매기를 정의하십시오. 예 :

&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 또는 기타 수동 해킹이 필요하지 않습니다.




Related