빠른 제작 TextView 링크 및 이벤트 지정 클릭

8314 단어 Android

개시하다



규약이나 프라이버시 정책 등을 사용해 글의 일부를 브라우저에 링크하려는 경우 사용한 노트를 복사할 수 있다.Spannable String을 사용하면 상당히 번거롭기 때문에 총괄할 수 있습니다.
정규 표현식을 사용하여 링크할 텍스트를 지정하고 여러 링크를 동시에 연결합니다.onClick의 내용을 변경하면 브라우저 이외의 동작을 건너뛰는 데도 사용할 수 있습니다.

코드


SampleFragment.java

private void setSpannableString(View view) {

    String message = "利用規約、プライバシーポリシーに同意する。";

    // リンク化対象の文字列、リンク先 URL を指定する
    Map<String, String> map = new HashMap<String, String>();
    map.put("利用規約", "http://hogehoge.com/rules");
    map.put("プライバシーポリシー", "http://hogehoge.com/policies");

    // SpannableString の取得
    SpannableString ss = createSpannableString(message, map);

    // SpannableString をセットし、リンクを有効化する
    TextView textView = (TextView) view.findViewById(R.id.text);
    textView.setText(ss);
    textView.setMovementMethod(LinkMovementMethod.getInstance());
}

private SpannableString createSpannableString(String message, Map<String, String> map) {

    SpannableString ss = new SpannableString(message);

    for (final Map.Entry<String, String> entry : map.entrySet()) {
        int start = 0;
        int end = 0;

        // リンク化対象の文字列の start, end を算出する
        Pattern pattern = Pattern.compile(entry.getKey());
        Matcher matcher = pattern.matcher(message);
        while (matcher.find()) {
            start = matcher.start();
            end = matcher.end();
            break;
        }

        // SpannableString にクリックイベント、パラメータをセットする
        ss.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                String url = entry.getValue();
                Uri uri = Uri.parse(url);
                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
            }
        }, start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    }

    return ss;
}

참고 자료


http://developer.android.com/reference/android/text/SpannableString.html
http://developer.android.com/reference/android/text/Spanned.html

좋은 웹페이지 즐겨찾기