본문 바로가기
Android/Dev

textView를 하이퍼 링크로 만들기

by featherwing 2020. 3. 10.
728x90
반응형
  1. autoLink
  2. textview를 하이퍼 링크처럼 보이게 + onClickListener

1. autoLink

 

TextView의 텍스트를 클릭하면 웹브라우저가 열리도록 할 수 있습니다.

onClickListner를 달아 세부적인 기능 추가를 할 수도 있으나 

간단하게 열릴 수 있도록 하는 옵션은 하단의 autoLink 옵션을 달아주는것으로 충분합니다.

 android:autoLink="web"

 

 

사용방법은 아래와 같습니다.

<TextView
            android:id="@+id/text_urls"
            android:textColor="@color/color_text_black"
            android:autoLink="web"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            />

 

 

이외에도 다양한 옵션 부여가 가능합니다.

 

안드로이드 개발자문서에 따르면 아래와 같습니다.

*all로 해두면 자동으로 판단하여 해당 종류에 해당하는 앱을 실행하여 줍니다.

all Match all patterns (equivalent to web|email|phone|map).
email Match email addresses.
map Match map addresses. Deprecated: see Linkify.MAP_ADDRESSES.
none Match no patterns (default).
phone Match phone numbers.
web Match Web URLs.

 

 

2. textview를 하이퍼 링크처럼 보이게 + onClickListener

 

하지만 텍스트뷰를 클릭했을 때 좀 더 복잡한 작업을 수행하기를 원한다면 다른방법을 사용해야 합니다. 이때는 아래와 같이 직접 만들어 줍니다.

 

하단의 코드는 텍스트뷰에 onClickListener를 달아줍니다. 저는 텍스트의 url을 Fragment에 넘겨 이를 실행하는데 사용하했습니다.  

    public void textviewLinkable() {
        makeTextViewHyperlink(mTextView);
        mTextView.setOnClickListener(
                v -> {
                    String url = mTextView.getText().toString();
                    replaceFragment(FragmentSomething.newInstance(url));
                }
        );
    }

 

하단의 코드는 텍스트뷰를 HyperLink처럼 보이도록 꾸며주는 코드입니다. 

    public static void makeTextViewHyperlink(TextView tv) {
        SpannableStringBuilder ssb = new SpannableStringBuilder();
        ssb.append(tv.getText());
        ssb.setSpan(new URLSpan("#"), 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(ssb, TextView.BufferType.SPANNABLE);
    }

 

onCreate나 onCreateView 같은곳에 아래와 같이 사용하면 됩니다.

       @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView mTextView = findViewById(R.id.textview);
        textviewLinkable(mTextView)
        }
    
    
    
    public void textviewLinkable(TextView textView) {
        makeTextViewHyperlink(textView);
        textView.setOnClickListener(
                v -> {
                    String url = textView.getText().toString();
                    replaceFragment(FragmentSomething.newInstance(url));
                }
        );
    }
    
    
    public static void makeTextViewHyperlink(TextView tv) {
        SpannableStringBuilder ssb = new SpannableStringBuilder();
        ssb.append(tv.getText());
        ssb.setSpan(new URLSpan("#"), 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tv.setText(ssb, TextView.BufferType.SPANNABLE);
    }

 

 

 

 

728x90
반응형

댓글