Android中TextView實現的多個可點擊的文本效果
qq空間、微信、微博中點贊的效果,效果圖如下:
Android中TextView實現多個可點擊的文本
得到TextView對象mTextView,調用mTextView.setMovementMethod(LinkMovementMethod.getInstance())方法設置TextView鏈接可點擊。調用mTextView.setText(SpannableStringBuilder對象, BufferType.SPANNABLE)方法,設置多文本點擊。
Java代碼
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- TextView mTextView = (TextView) rootView.findViewById(R.id.like_tv);
- // 構造多個超鏈接的html, 通過選中的位置來獲取用戶名
- StringBuilder sbBuilder = new StringBuilder();
- for (int i = 0; i < 10; i++) {
- sbBuilder.append("username-" + i + "、");
- }
- String likeUsers = sbBuilder.substring(0, sbBuilder.lastIndexOf("、")).toString();
- mTextView.setMovementMethod(LinkMovementMethod.getInstance());
- mTextView.setText(addClickablePart(likeUsers), BufferType.SPANNABLE);
-
- }
- private SpannableStringBuilder addClickablePart(String str) {
- // 第一個贊圖標
- ImageSpan span = new ImageSpan(getActivity(), R.drawable.umeng_comm_like);
- SpannableString spanStr = new SpannableString("p.");
- spanStr.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
- ssb.append(str) ;
- String[] likeUsers = str.split("、");
- if (likeUsers.length > 0) {
- // 最後一個
- for (int i = 0; i < likeUsers.length; i++) {
- final String name = likeUsers[i];
- final int start = str.indexOf(name) + spanStr.length();
- ssb.setSpan(new ClickableSpan() {
-
- @Override
- public void onClick(View widget) {
- Toast.makeText(getView().getContext(), name,
- Toast.LENGTH_SHORT).show();
- }
-
- @Override
- public void updateDrawState(TextPaint ds) {
- super.updateDrawState(ds);
- // ds.setColor(Color.RED); // 設置文本顏色
- // 去掉下劃線
- ds.setUnderlineText(false);
- }
-
- }, start, start + name.length(), 0);
- }
- }
- return ssb.append("等"
- + likeUsers.length + "個人贊了您.");
- } // end of addClickablePart
程序運行效果
程序運行效果如下: