android字符串处理

在安卓开发中我们需要利用TextView实现各种各样的文字展示效果,这里记录常用的几种利用TextView对文字的处理。效果图:

在这里插入图片描述

一、利用TextView的ellipsize属性实现跑马灯轮播效果
<TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:marqueeRepeatLimit="marquee_forever"
            android:singleLine="true"
            android:text="中国民营企业500强发布,华为超联想夺第一中国民营企业500强发布,华为超联想夺第一" />
二、借助自定义控件MarqueeView实现竖向轮播
<com.liuxingyu.textview.MarqueeView
            android:id="@+id/marqueeview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@drawable/bg_marqueeview"
            app:itemAnimationTime="700"
            app:paddingLeft="10dp"
            app:paddingTopBottom="15dp"
            app:reRepeatDelayTime="1000"
            app:startDelayTime="500"
            app:textColor="#333333"
            app:textSize="16sp" />
//竖向轮播
    void VerticalMarqueeView() {
        marqueeView.setTextArray(contentArray);
        marqueeView.setOnItemClickListener(new MarqueeView.onItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this, contentArray[position], Toast.LENGTH_SHORT).show();
            }
        });
    }
三、协议点击效果(SpannableString)

这个是根据文字动态计算的,对各种各样的都能够处理的得心应手,缺点是利用TextView的SpannableString实现点击事件就是文字本身,点击范围较小。

//协议点击效果(SpannableString)
    void SpannableString() {
        SpannableString spanText = new SpannableString("《协议1》、《协议2》、《协议3》、《协议4》");
        spanText.setSpan(new ClickableSpan() {

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.RED);       //设置文件颜色
                ds.setUnderlineText(false);      //设置下划线
            }

            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "《协议1》", Toast.LENGTH_SHORT).show();
            }
        }, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spanText.setSpan(new ClickableSpan() {

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.RED);       //设置文件颜色
                ds.setUnderlineText(false);      //设置下划线
            }

            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "《协议2》", Toast.LENGTH_SHORT).show();
            }
        }, 6, 11, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        tv_agreement.setHighlightColor(Color.TRANSPARENT); //设置点击后的颜色为透明,否则会一直出现高亮
        tv_agreement.setText(spanText);
        tv_agreement.setMovementMethod(LinkMovementMethod.getInstance());//开始响应点击事件
    }
四、图文混排效果(SpecialStringBuilder)

这里使用的SpecialStringBuilder对文字进行处理,样式相对来说会更多一点


```java
//图文混排效果(SpecialStringBuilder)
    void SpannableStringBuilder() {
        SpecialStyle style = new SpecialStyle();
        SpecialStringBuilder sb = new SpecialStringBuilder();
        style.setColor(Color.RED);
        style.setBackgroundColor(Color.WHITE);
        style.setClickable(new ClickableStyle.OnClick() {
            @Override
            public void onClick(View widget) {

                Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
            }
        });
        style.clearUnderLine();
        style.clearStrikethrough();
        sb.append("白底红字", style);

        style.clearColor();
        sb.append("红底正常文字", style);

        style.setColor(Color.WHITE);
        style.setClickable(new ClickableStyle.OnClick() {
            @Override
            public void onClick(View widget) {

                Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
            }
        });

        style.setBackgroundColor(Color.BLUE);
        sb.append("可以点击事件的蓝底文字", style);

        style.clearStyles()
                .setImage(new ImageSpan(this, R.mipmap.ic_launcher), false);
        sb.append("变成图片的文字", style);

        style.setUnderLine(false);
        sb.append("下划线的文字", style);

        style.setStrikethrough(false);
        sb.append("删除线的文字", style);

        style.clearStyles();
        sb.append("普通的文字", style);

        tv_specialStringBuilder.setText(sb.getCharSequence());
        tv_specialStringBuilder.setMovementMethod(LinkMovementMethod.getInstance());
    }
五、图文混排效果(HtmlString)

对于html基础还记得的同学建议使用,样式相对来说最全面。当然也可以考虑使用WebView控件。

//图文混排效果(HtmlString)
    void htmlString() {
        tv_html.setText(Html.fromHtml(HTML_TEXT));
    }
发布了57 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/liuxingyuzaixian/article/details/104377530