这篇文章将为大家详细讲解有关Android如何实现可以展开的TextView,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
具体内容如下
原理是通过点击的时候设置 setMaxLines(lineNum)来实现:
public class ExpandableTextView extends TextView {
private static int MIN_LINE_NUM = 2;
private static int MAX_LINE_NUM = 20;
private int lineNum = MIN_LINE_NUM;
private boolean mIsExpanded = false;
Bitmap bitmapDown;
Bitmap bitmapUp;
int w, h;
/** 点击事件listener */
private OnClickListener mOnClickListener;
public ExpandableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
setMaxLines(lineNum);
bitmapDown = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_down);
bitmapUp = BitmapFactory.decodeResource(getResources(), R.drawable.update_detail_up);
w = bitmapDown.getWidth() + (int) context.getResources().getDimension(R.dimen.expand_textview_right);
h = bitmapDown.getHeight() + (int) context.getResources().getDimension(R.dimen.expand_textview_bottom);
super.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (lineNum == MIN_LINE_NUM) {
lineNum = MAX_LINE_NUM;
setMaxLines(lineNum);
} else {
lineNum = MIN_LINE_NUM;
setMaxLines(lineNum);
}
if (mOnClickListener != null) {
mOnClickListener.onClick(v);
}
}
});
}
@Override
public void setOnClickListener(OnClickListener listener) {
if (!isClickable()) {
setClickable(true);
}
mOnClickListener = listener;
}
@Override
public void setMaxLines(int maxlines) {
super.setMaxLines(maxlines);
if (lineNum == MAX_LINE_NUM) {
mIsExpanded = true;
} else {
mIsExpanded = false;
}
}
public boolean isExpanded() {
return mIsExpanded;
}
@Override
protected void onDraw(Canvas canvas) {
if (getLineCount() <= MIN_LINE_NUM) {
super.onDraw(canvas);
return;
}
if (lineNum == MIN_LINE_NUM) {
canvas.drawBitmap(bitmapDown, getWidth() - w, getHeight() - h, null);
} else {
canvas.drawBitmap(bitmapUp, getWidth() - w, getHeight() - h, null);
}
super.onDraw(canvas);
}
public void setMaxLine(int line) {
lineNum = line;
setMaxLines(line);
}
}
这样来写Layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF" >
<TextView
android:id="@+id/detail_action"
android:textColor="#000000"
android:textSize="11sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginRight="8dip"
android:drawablePadding="4dip"
android:paddingBottom="10dip"
android:paddingTop="10dip"
android:singleLine="true"
android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" />
<com.example.view.ExpandableTextView
android:id="@+id/textview"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_below="@id/detail_action"
android:lineSpacingExtra="4dip"
android:paddingBottom="-40dip"
android:paddingRight="48dip"
android:text="adfsfsfewrwerwerwerqRWgdffdfdfERSAFSDFSDFSDd"
android:layout_marginTop="-5dip"
android:textColor="#000000" >
</com.example.view.ExpandableTextView>
<TextView
android:id="@+id/detail_action1"
android:textColor="#000000"
android:textSize="11sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/textview"
android:layout_marginRight="8dip"
android:drawablePadding="4dip"
android:paddingBottom="10dip"
android:paddingTop="10dip"
android:singleLine="true"
android:text="sdfkljsfiosjdfiosfjsiofjsdifsd" />
</RelativeLayout>
效果图:
关于“Android如何实现可以展开的TextView”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。