android 实现textView 文本第一行开头嵌套图片,或者圆角TextView的实现思路

最近项目要实现一个需求这种效果,黄色背景有圆角,字体内容会变化,首先想到的是用ImageSpan之类的来实现,可是找了好多没找到,无意之间想到可以自己写个自定义View来实现呀。于是思路就是黄色背景的是一个TextView A可以自己画圆角,第一行的“考上北京大学的经验!考上北京”一个TextView B,“大学的经验”一个TextView C即可实现。

String textString = "考上北京大学的经验!考上大学的经验!";

其中需要注意的有两点:

1.怎样将文本正确的拆分并且拼接起来。

2.要按照三个TextView绘制完成的时间,依次setText().否则会导致空指针。

针对问题1:首先将文本拼接起来的方法:

Layout layout = textViewB.getLayout();

int start = layout.getLineStart(0);

int end = layout.getLineEnd(0);

String firstString = textString.subString(start,end);//得到的就是textViewB 上边显示的文本。

String secondString = textString.replace(firstString,"");//得到的就是textViewC 上边显示的文本。

针对问题2:要注意拿到start和end都是在上一个TextView绘制好之后的。所以我们只有当上一个TextView设置好文本后才能获取在TextViewB上的文本显示。

textViewB.setText(textString);

final ViewTreeObserver vto = textViewB.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
        ViewTreeObserver vto2 = textViewB.getViewTreeObserver();
        vto2.removeOnPreDrawListener(this);

        Layout layout = textViewB.getLayout();

        int start = layout.getLineStart(0);
        int end = layout.getLineEnd(0);

        String firstString = mTitleString.substring(start, end);

        String secondString = mTitleString.replace(firstString, "");

        textViewC.setText(secondString);

        return false;
    }

});

是不是很简单。

你可能感兴趣的:(Android)