TextView实现文本的收起与展示

来源:互联网 发布:网络女神雅典娜是谁 编辑:程序博客网 时间:2024/06/05 16:14

这个功能我是借用的别人的代码,写在这里只是为了记录,方便以后的使用。

先上代码,在values目录下新建一个attrs.xml,放入代码:

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="ExpandTextView">        <attr name="showLines" format="integer"/>    </declare-styleable></resources>

然后新建一个类:

import android.content.Context;import android.content.res.TypedArray;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import demo.yang.com.baisi.R;/** * 有全文和收起的TextView */public class ExpandTextView extends LinearLayout {    public static final int DEFAULT_MAX_LINES = 3;    private TextView contentText;    private TextView textPlus;    private OnExpandTextViewClicklistener onExpandTextViewClicklistener;    private int showLines;    public ExpandTextView(Context context) {        super(context);        initView();    }    public ExpandTextView(Context context, AttributeSet attrs) {        super(context, attrs);        initAttrs(attrs);        initView();    }    public ExpandTextView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initAttrs(attrs);        initView();    }    private void initView() {        setOrientation(LinearLayout.VERTICAL);        LayoutInflater.from(getContext()).inflate(R.layout.layout_magic_text, this);        contentText = (TextView) findViewById(R.id.contentText);        if(showLines > 0){//            contentText.setMaxLines(showLines);//设定显示行数            contentText.setMaxLines(showLines);        }        contentText.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                onExpandTextViewClicklistener.onExpandTextViewClick();            }        });        textPlus = (TextView) findViewById(R.id.textPlus);//扩展点击事件        textPlus.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                String textStr = textPlus.getText().toString().trim();                if("全文".equals(textStr)){                    contentText.setMaxLines(Integer.MAX_VALUE);                    textPlus.setText("收起");                }else{                    contentText.setMaxLines(showLines);                    textPlus.setText("全文");                }            }        });    }    private void initAttrs(AttributeSet attrs) {        TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.ExpandTextView, 0, 0);//属性        try {            showLines = typedArray.getInt(R.styleable.ExpandTextView_showLines, DEFAULT_MAX_LINES);//显示属性行数        }finally {            typedArray.recycle();        }    }    public void setText(final CharSequence content){        contentText.post(new Runnable() {            @Override            public void run() {                contentText.setText(content);                int linCount = contentText.getLineCount();                if(linCount > showLines){                    contentText.setMaxLines(showLines);                    textPlus.setVisibility(View.VISIBLE);                    textPlus.setText("全文");                }else{                    textPlus.setVisibility(View.GONE);                }            }        });    }    public OnExpandTextViewClicklistener getOnExpandTextViewClicklistener() {        return onExpandTextViewClicklistener;    }    public void setOnExpandTextViewClicklistener(OnExpandTextViewClicklistener onExpandTextViewClicklistener) {        this.onExpandTextViewClicklistener = onExpandTextViewClicklistener;    }    public interface  OnExpandTextViewClicklistener{        public void onExpandTextViewClick();    }}
这个类可以直接放在工具类文件夹里面,可以直接在布局文件中使用了,如果你有特殊的需要可以再添加对应的内容,这里面还需要一个布局代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/contentText"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#232323"        android:lineSpacingExtra="5dp"        android:textSize="17sp"        android:text=""        />    <TextView        android:id="@+id/textPlus"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textSize="17sp"        android:textColor="#8290AF"        android:paddingBottom="5dp"        android:text=""        /></LinearLayout>

上面的TextView是用来显示文本内容,下面的TextView用来显示“收起”和“全文”。

然后在布局文件里面调用的方法如下

<demo.yang.com.demo.Utils.ExpandTextView        android:id="@+id/essence_content"        android:paddingLeft="15dp"        android:paddingRight="15dp"        app:showLines="7"        android:layout_width="match_parent"        android:layout_height="wrap_content" />
showLines就是设置的最多显示几行,超过了这个值,就收起。

最后还是给一张效果图吧,不要在意内容。。。用的别人家的接口


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 违章缴费单丢了,怎么办 违章处理单掉了怎么办 驾驶证被扣9分后怎么办 车子违章扣50分怎么办 车子扣了12分怎么办 大学把档案丢了怎么办 学校把档案丢了怎么办 高考考了200多分怎么办 高考报名号忘了怎么办 中考只考500分怎么办 档案自提了之后怎么办 冬天衣服上的毛怎么办 四维预约不上怎么办 交了订金后悔了怎么办 信而富认证失败怎么办 南京市民卡坏了怎么办 南京市民卡断了怎么办 义乌市民卡丢了怎么办 常熟市民卡丢了怎么办 昆山市民卡丢了怎么办 市民卡丢了看病怎么办 儿童市民卡丢了怎么办 眉毛纹的太黑怎么办 法院执行书下了怎么办 汽车临牌过期了怎么办 考试用了hb铅笔怎么办 处对象处的心累怎么办 孩子初中毕业考不上高中怎么办 单位停交社保后怎么办 58同城电话骚扰怎么办 回民误吃了猪肉怎么办 回族人吃了猪肉怎么办 商场倒闭了商铺怎么办 吃了金毓婷出血怎么办 吃过毓婷后怀孕怎么办 新鲜枣子吃多了怎么办 xp系统重启黑屏怎么办 15岁初中生厌学怎么办 被九州教育骗了怎么办 腰疼的不能弯腰怎么办 长期弯腰导致的腰疼怎么办