Android-浅谈自定义ExpandTextView可展开收缩带图片

背景

上有需求千变万化,下有开发一手乾坤。最近项目需求多文本的展开收缩样式,而且末尾还要带上图片,本来想着网上找开源项目直接使用,谁曾想没一个好使的,得老老实实自定吧!且看下方效果图!

效果

  • 常规模式(末尾带文字)
    Android-浅谈自定义ExpandTextView可展开收缩带图片_第1张图片
  • 非常规用法(末尾带图片)
    Android-浅谈自定义ExpandTextView可展开收缩带图片_第2张图片

使用

  • 常规使用方法
        textView.initWidth(textview宽度px);
        textView.setMaxLines(最多显示多少行就隐藏其他的文字int);
        textView.setAppendText(true);//是否拼接文本(拼接就是常规样式)
        textView.setCloseText(text);//收起时的文本
  • 非常规使用方法

        textView.initWidth(textview宽度px);
        textView.setMaxLines(Integer.MAX_VALUE);
        textView.setAppendText(fslse);//是否拼接文本(不拼接就是非常规样式,必须带个图片)
        textView.setRes(R.mipmap.icon_douhao_down);
  	    textView.setExpandText(text);;//展开时的文本

        private boolean expand = true;
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (expand) {
                    expand = false;
                    textView.setMaxLines(3);
                    textView.setCloseText(text);
                } else {
                    expand = true;
                    textView.setMaxLines(Integer.MAX_VALUE);
                    textView.setExpandText(text);
                }
            }
        });
  • 注意在使用非常规方式时,需要自行去设置点击事件,控制文本的展开和收缩

拓展

为了解决文本参差不齐的问题(全角和半角文本混排),代码中也顺便补充了个设置全文本全角和半角的方法:

  • 方法如下
    /**
     * 转全角
     *
     * @param input
     * @return
     */
    private static String toDBC(String input) {
        char c[] = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '\n') {

            } else if (c[i] == ' ') {
                c[i] = '\u3000';
            } else if (c[i] < '\177') {
                c[i] = (char) (c[i] + 65248);
            }
        }
        return new String(c);
    }

    /**
     * 转半角
     *
     * @param input
     * @return
     */
    public static String ToDBC(String input) {
        char c[] = input.toCharArray();
        for (int i = 0; i < c.length; i++) {
            if (c[i] == '\u3000') {
                c[i] = ' ';
            } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
                c[i] = (char) (c[i] - 65248);

            }
        }
        return new String(c);
    }

使用哪种方式随意切换:默认使用的是全角格式

结语

愿有岁月可回首!源码已经放到github上,欢迎查阅!

你可能感兴趣的:(Android-浅谈自定义ExpandTextView可展开收缩带图片)