简单操作4步即可实现文字展开收起功能:
1.布局写2个Textview 一个是内容 一个是按钮(收起和全文)
<TextView
android:layout_marginTop="@dimen/x64"
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:alpha="0.85"
android:ellipsize="end"
android:text="内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容"
android:textColor="@android:color/black"
android:textSize="14sp"/>
<TextView
android:id="@+id/tv_expand_or_fold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="全文"
android:textColor="@color/colorPrimaryDark"
android:textSize="14sp"/>
2.设置 最高显示几行、折叠、展开、状态、变量
private final int MAX_LINE_COUNT = 3;//最大显示行数
private final int STATE_COLLAPSED = 2;//折叠状态
private final int STATE_EXPANDED = 3;//展开状态
private int state;
3.调用View中getViewTreeObserver()这个方法设置监听OnPreDrawListener
interfaceViewTreeObserver.OnPreDrawListener 当一个视图树将要绘制时,所要调用的回调函数的接口类
tvContent.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
//这个回掉会调用多次,获取完行数后记得注销监听
tvContent.getViewTreeObserver().removeOnPreDrawListener(this);
//如果内容显示的行数大于最大显示行数
if (tvContent.getLineCount() > MAX_LINE_COUNT) {
tvContent.setMaxLines(MAX_LINE_COUNT);//设置最大显示行数
expandOrFold.setVisibility(View.VISIBLE);//显示“全文”
expandOrFold.setText("全文");
state = STATE_COLLAPSED;
}else{
//内容不多,小于最大显示行数,隐藏展开的textview
expandOrFold.setVisibility(View.GONE);
}
return true;
}
});
4.设置查看更多内容展开折叠的点击处理
//全文和收起的点击事件
expandOrFold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "onClick: "+state);
if (state == STATE_COLLAPSED) {
tvContent.setMaxLines(Integer.MAX_VALUE);
expandOrFold.setText("收起");
state = 3;
} else if (state == STATE_EXPANDED) {
tvContent.setMaxLines(MAX_LINE_COUNT);
expandOrFold.setText("全文");
state = 2;
}
}
});
写的不好,请多多指教!!!