1.实现代码如下:
//textview的最大行数根据需要改动
tv.setSelected(false);
tv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//当内容只有一行时,如果不做此拦截,会发生内容抖动现象
if(!isOverFlowed(tv)){
return;
}
if(tv.isSelected()){ //收起
tv.setSelected(false);
tv.setMaxLines(1);
} else{ //展开
tv.setMaxLines(10);
tv.setSelected(true);
}
}
});
2.注意事项:xml文件中,textview控件的 android:paddingBottom,android:paddingTop要足够大,不然会发生内容抖动现象;另外,如果文字显示需要不全用省略号显示,不要忘记添加 android:ellipsize="end"属性;
3.判断TextView的内容宽度是否超出其可用宽度的实现方法。借鉴自:http://www.hankcs.com/program/mobiledev/android-textview-determine-whether-excess-of-ellipsis.html
/**
* 判断TextView的内容宽度是否超出其可用宽度
* @param tv
* @return
*/
public static boolean isOverFlowed(TextView tv) {
int availableWidth = tv.getWidth() - tv.getPaddingLeft() - tv.getPaddingRight();
Paint textViewPaint = tv.getPaint();
float textWidth = textViewPaint.measureText(tv.getText().toString());
if (textWidth > availableWidth) {
return true;
} else {
return false;
}
}