判断TextView有没有显示完全(即有没有出现省略号),若果没有显示完全,则点击某个按钮查看全部
第一种方法:
<!--你可能会在设置ellipsize,maxLines,lines,singleLine等属性-->
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="40dp"
android:gravity="center_vertical"
android:textSize="16sp"
android:ellipsize="end"
android:maxLines="5"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:lineSpacingMultiplier="1.2"
android:textColor="@color/title_color"/>
<TextView
android:id="@+id/tv_check_all"
android:visibility="gone"
android:textSize="16sp"
android:layout_margin="10dp"
android:textColor="@color/nav_bg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看全文"/>
/**
* 如果TextView没有显示完全就显示查看全部按钮,点击查看全部按钮后TextView会显示全部内容,同时隐藏查看全部按钮
* @param tv_content
*/
private void showCheckAll(final TextView tv_content) {
Layout l = tv_content.getLayout();
if (l != null) {
int lines = l.getLineCount();
if (lines > 0) {
if (l.getEllipsisCount(lines - 1) > 0) {
checkAll.setVisibility(View.VISIBLE);
checkAll.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//显示TextView的全部内容其实就是取消这类隐藏文字的属性
tv_content.setEllipsize(null);
tv_content.setSingleLine(false);
checkAll.setVisibility(View.GONE);
}
});
}else{
checkAll.setVisibility(View.GONE);
}
}
}
}
第二种方法
一:继承TextView添加下面方法
private int getAvailableWidth() {
return getWidth() - getPaddingLeft() - getPaddingRight();
}
public boolean isOverFlowed() {
Paint paint = getPaint();
float width = paint.measureText(getText().toString());
if (width > getAvailableWidth()) return true;
return false;
}
二:给该TextView添加TextChangeListener监听
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (checkAll == null){
return;
}
if(content!=null && content.isOverFlowed()){
checkAll.setVisibility(View.VISIBLE);
checkAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
content.setEllipsize(null);
content.setSingleLine(false);
}
});
}else {
checkAll.setVisibility(View.GONE);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
};
但是该方法有个缺点是添加监听后,TextView的省略号无法显示了