TextView의 일부 문자를 만들어 주위의 편의류를 클릭했다.

10359 단어 Android
TextView에서 텍스트 일부를 클릭할 때 동작의 설치 방법은 번거로운 부분이 많아 다음 조건에서만 편리한 반을 만들었다.
  • 전체 텍스트, 일부 문자열만 정의하면 이동합니다.
  • 임의의 동작을 쓸 수 있는 청중이 있다.

  • 전문't e s t h og e e e e eeehogefuaagaggapiyo'에서 문자열'hoge'와'fuga'의 클릭에 개별적으로 반응하는 샘플과 편의 클래스.

    편의류


    TextLinker.java
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import android.text.SpannableString;
    import android.text.Spanned;
    import android.text.style.ClickableSpan;
    import android.util.SparseArray;
    import android.view.View;
    
    public class TextLinker {
    
        public interface OnLinkClickListener{
            public void onLinkClick(int textId);
        }
    
        private static class TextClickSpan extends ClickableSpan{
    
            private OnLinkClickListener mListener;
            private int mTextId;
    
            public TextClickSpan(int textId , OnLinkClickListener listener){
                mTextId = textId;
                mListener = listener;
            }
    
            @Override
            public void onClick(View widget) {
                if(mListener != null)mListener.onLinkClick(mTextId);
            }
        }
    
        public static SpannableString getLinkableText(String text , SparseArray<String> links , OnLinkClickListener listener){
            SpannableString spannable = new SpannableString(text);
    
            int size = links.size();
            for(int i = 0 ; i < size ; i++){
                int key = links.keyAt(i);
                String link = links.get(key);
                Pattern p = Pattern.compile(link);
                Matcher m = p.matcher(text);
                while(m.find()){
                    TextClickSpan span = new TextClickSpan(key , listener);
                    spannable.setSpan(span, m.start(), m.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
            return spannable;
        }
    }
    
    
    

    사용법

        String text ="testhogehogeeeeeeehogefugaaaaagugapiyo";
        SparseArray<String> links = new SparseArray<String>();
        links.append(0, "hoge");
        links.append(1, "fuga");
    
        OnLinkClickListener listener = new OnLinkClickListener() {
            @Override
            public void onLinkClick(int textId) {
                // hogeをクリックするとtextIdは0、
                // fugaをクリックするとtextIdは1。
            }
        };
    
        TextView textView = (TextView)findViewById(R.id.text);
        textView.setText(TextLinker.getLinkableText(text, links, listener));
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    
    

    링크 색상을 변경할 때

    <TextView
                android:id="@+id/text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@android:color/black"
                android:textColorLink="@android:color/holo_purple"
                /> 
    

    좋은 웹페이지 즐겨찾기