Android中TextView实现的多个可点击的文本效果
qq空间、微信、微博中点赞的效果,效果图如下:
Android中TextView实现多个可点击的文本
得到TextView对象mTextView,调用mTextView.setMovementMethod(LinkMovementMethod.getInstance())方法设置TextView链接可点击。调用mTextView.setText(SpannableStringBuilder对象, BufferType.SPANNABLE)方法,设置多文本点击。
- @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
程序运行效果
程序运行效果如下:
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。