本文实例为大家分享了一个可以展开的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>

效果图:

代码一个可以展开的TextView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

02-06 10:25
查看更多