TextView의 일부 문자를 만들어 주위의 편의류를 클릭했다.
10359 단어 Android
전문'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"
/>
Reference
이 문제에 관하여(TextView의 일부 문자를 만들어 주위의 편의류를 클릭했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/garlicG/items/0aff3957f2c9e7fac39d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)