Text过长收起
来源:互联网 发布:apache flink 编辑:程序博客网 时间:2024/04/29 17:06
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);
- Text过长收起
- 【小技巧】过长文本截取技术 text-overflow:ellipsis
- text-overflow:ellipsis的巧妙运用,显示字符过长处理
- 单行文本过长自动替换为省略号的css写法:text-overflow:ellipsis;
- 收起浮躁
- 收起键盘
- 键盘收起
- 收起键盘
- 收起键盘
- 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题
- text
- text
- text
- text
- Text
- text
- text
- text
- 手机管理应用研究【5】——应用杂篇
- java生成json格式数据 和 java遍历json格式数据
- Linux常用信号的意义
- Mac 10.10 下载、编译android4.4过程及注意事项
- Jenkins入门篇
- Text过长收起
- 不打开VS IDE 编译项目工程
- SQL联合索引 与 单一列的索引
- Web性能优化方案
- MySQL5.7 虚拟列实现表达式索引
- edm模版设计
- Translate .htaccess Content to IIS web.config
- iOS设备出现本地存档丢失
- IIS状态代码的含义