Textview 粗略定位关键字,并截取在适合位置

219 阅读1分钟
/**
     *
     * @param context 上下文
     * @param originText 原文字
     * @param textView 空间
     * @param words 关键字
     * @return 截取后的字段
     */
    public static String getLineMaxNumber(Context context,String originText, TextView textView,String words) {
        //获取原文字长度
        float originTextWidth = textView.getPaint().measureText(originText);
       Log.e("长度","originTextWidth:"+originTextWidth);
        //获取控件长度
        float textViewWidth = getScreenWidthInPx(context)-dp2px(context,80);
        Log.e("长度","textViewWidth:"+textViewWidth);
        //控件长度大于文字长度 直接显示
        if (textViewWidth >= originTextWidth) {
            return originText;
        } else {
            //计算是否超出两行
            float lineNum=originTextWidth/textViewWidth;
            if (lineNum>2){
                //预计行数大于两行时
                int wordIndex=originText.indexOf(words);
                String spannerText=originText.substring(0,wordIndex)+words;
                float splitTextWidth = textView.getPaint().measureText(spannerText);
                Log.e("长度","spannerText:"+spannerText);
                //计算到第一个关键字时 是否超过两行
                float splitLineNum=splitTextWidth/textViewWidth;
                if (splitLineNum>2){
                    if (originText.endsWith(words)){
                        //如果关键字在最后一个 往前截取8个字符
                        return "..."+originText.substring(wordIndex-8);
                    }
                    Log.e("长度","spannerText:"+originText.substring(wordIndex));
                    return  "..."+originText.substring(wordIndex);
                }else {
                    return originText;
                }
            }else {
                return originText;
            }

        }
    }

效果

效果类似qq的聊天记录搜索