TextView过长,超过6行,便收起
代码:
public class CollapsibleTextView extends LinearLayout implements OnClickListener {
/** 最大显示的行数 */
private static final int DEFAULT_MAX_LINE_COUNT = 8;
/** 实际展示的行数 */
private static final int DEFAULT_SHOW_LINE_COUNT = 6;
/** View 默认状态 ,即不是展开状态也不是收缩状态 **/
private static final int COLLAPSIBLE_STATE_NONE = 0;
/** View处于展开状态 **/
private static final int COLLAPSIBLE_STATE_SHRINKUP = 1;
/** view收缩时状态 **/
private static final int COLLAPSIBLE_STATE_SPREAD = 2;
/** 显示内容的View */
private TextView tv_context;
/** 展开/收起按钮 */
private TextView bt_spread;
private String shrinkup;
private String spread;
private boolean flag;
private int nowType;
private CollapsibleTextView coTextView;
/** 判断是不是点击了查看更多、收起 */
private boolean isClicke = false;
private int lookCount = 0;
public CollapsibleTextView(Context context, AttributeSet attrs) {
super(context, attrs);
shrinkup = "收起";
spread = "全文";
View view = inflate(context, R.layout.collapsible_textview, this);
view.setPadding(0, -1, 0, 0);
tv_context = (TextView) view.findViewById(R.id.tv_context);
bt_spread = (TextView) view.findViewById(R.id.bt_spread);
bt_spread.setOnClickListener(this);
}
public CollapsibleTextView(Context context) {
this(context, null);
}
/**
* 赋值
*/
public final void setDesc(CharSequence charSequence,CollapsibleTextView tv, BufferType bufferType) {
this.coTextView = tv;
// 对内容中的网址进行处理;
tv_context.setAutoLinkMask(Linkify.WEB_URLS);
tv_context.setMovementMethod(LinkMovementMethod.getInstance());
//小表情判断
SpannableString spannableString =FaceConversionUtil.getInstace().getExpressionString(getContext(), charSequence.toString());
tv_context.setText(spannableString, bufferType);
lookCount=0;
coTextView.setNowType(COLLAPSIBLE_STATE_SPREAD);
lookCount += 1;
flag = false;
isClicke=false;
bt_spread.setVisibility(View.GONE);
requestLayout();
}
@Override
public void onClick(View v) {
flag = false;
isClicke = true;
requestLayout();
}
@SuppressLint("DrawAllocation")
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (!flag) {
flag = true;
if (tv_context.getLineCount() <= DEFAULT_MAX_LINE_COUNT) {
bt_spread.setVisibility(View.GONE);
tv_context.setMaxLines(DEFAULT_MAX_LINE_COUNT + 1);
coTextView.setNowType(COLLAPSIBLE_STATE_NONE);
} else {
post(new InnerRunnable());
}
}
}
class InnerRunnable implements Runnable {
@Override
public void run() {
int zType = 0;
// 第一次进入操作(没有点击并且是第一次进入);
if (!isClicke && lookCount == 1) {
if (coTextView.getNowType() == COLLAPSIBLE_STATE_SPREAD) {
tv_context.setMaxLines(DEFAULT_SHOW_LINE_COUNT);
bt_spread.setVisibility(View.VISIBLE);
bt_spread.setText(spread);
zType = COLLAPSIBLE_STATE_SHRINKUP;
} else if (coTextView.getNowType() == COLLAPSIBLE_STATE_SHRINKUP) {
tv_context.setMaxLines(Integer.MAX_VALUE);
bt_spread.setVisibility(View.VISIBLE);
bt_spread.setText(shrinkup);
zType = COLLAPSIBLE_STATE_SPREAD;
}
coTextView.setNowType(zType);
// 点击了查看更多、收起转换状态;
} else if (isClicke) {
isClicke = false;
if (coTextView.getNowType() == COLLAPSIBLE_STATE_SPREAD) {
tv_context.setMaxLines(DEFAULT_SHOW_LINE_COUNT);
bt_spread.setVisibility(View.VISIBLE);
bt_spread.setText(spread);
coTextView.setNowType(COLLAPSIBLE_STATE_SHRINKUP);
} else if (coTextView.getNowType() == COLLAPSIBLE_STATE_SHRINKUP) {
tv_context.setMaxLines(Integer.MAX_VALUE);
bt_spread.setVisibility(View.VISIBLE);
bt_spread.setText(shrinkup);
coTextView.setNowType(COLLAPSIBLE_STATE_SPREAD);
}
}
}
}
public int getNowType() {
return nowType;
}
public void setNowType(int nowType) {
this.nowType = nowType;
}
}
xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_context"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="#7B7A78"
android:textSize="14sp" />
<TextView
android:id="@+id/bt_spread"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:paddingBottom="2dp"
android:paddingRight="50dp"
android:singleLine="true"
android:textColor="#60C4B8"
android:textSize="15sp"
android:visibility="gone" />
</LinearLayout>
如果这个textView要使用这个收起,查看:
xml:
<com.xxx.xxxxxx.CollapsibleTextView
android:id="@+id/theme"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp" />
代码自定义:
viewHolder.theme = (com.xxxx.xxxxxCollapsibleTextView) convertView.findViewById(R.id.theme);
viewHolder.theme.setDesc(entity.getTheme(), viewHolder.theme, BufferType.NORMAL);