适应多行长文本的Android TextView

适应多行长文本的Android TextView
摘要由CSDN通过智能技术生成
               

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

       大家经常会用到系统默认的TextView,TextView可以很好地适应单行长文本(尾部自动打上省略号),以及可以完整显示多行文本(TextView的宽高足够大)。但如果是很多行的文本而TextView又足够大的时候,则会出现以下这种情况.......超出的文本受TextView大小限制,不能完全显示。

      本文主要实现一个能够适应多行长文本的TextView,自动缩减长文本并在结尾补上省略号。如下图: 红色部分为普通的TextView, 绿色部分为本文实现的TextView。

 
       本文的源码可以到  http://download.csdn.net/detail/hellogv/4298631 下载,本文的TextViewMultilineEllipse.java改自 http://code.google.com/p/android-textview-multiline-ellipse/ 以及 http://code.google.com/p/android/ 的MyClipTextView.java,相对于前面2者,本文使用哈希表来保存每次onMeasure()计算所得的宽高,大幅减少重复计算宽高。

 

本文的主Activity的源码如下:

public class AutoFixTextViewActivity extends Activity private LinearLayout linearLayout1; private TextViewMultilineEllipse tvMultilineEllipse; private TextView tvNormal;  //水调歌头,大家懂的 private final String text="明月几时有?把酒问青天。不知天上宫阙,今夕是何年。\n"   +"我欲乘风归去,又恐琼楼玉宇,高处不胜寒。\n"   +"起舞弄清影,何似在人间。\n"   +"转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?\n"   +"人有悲欢离合,月有阴晴圆缺,此事古难全。\n"   +"但愿人长久,千里共婵娟。";    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        this.setTitle("适应多行文本的Android TextView---hellogv");                //共同的宽高        LayoutParams lp=new LayoutParams(LayoutParams.FILL_PARENT,100);        //----用TextView来显示换行长文本----//        tvNormal=(TextView)this.findViewById(R.id.tvNormal);        tvNormal.setLayoutParams(lp); //限制TextView的宽高        tvNormal.setEllipsize(TextUtils.TruncateAt.END);        tvNormal.setSingleLine(false);        tvNormal.setMaxLines(5);        tvNormal.setText(text);                        //----用TextViewMultilineEllipse来显示换行长文本----//        linearLayout1=(LinearLayout) this.findViewById(R.id.linearLayout1);                tvMultilineEllipse = new TextViewMultilineEllipse(this);  tvMultilineEllipse.setLayoutParams(lp);//限制TextView的宽高  tvMultilineEllipse.setEllipsis("...");//...替换剩余字符串  tvMultilineEllipse.setMaxLines(5);  tvMultilineEllipse.setTextSize((int)tvNormal.getTextSize());//设置文字大小  tvMultilineEllipse.setTextColor(Color.WHITE);  tvMultilineEllipse.setText(text);//设置文本    //在代码里添加tvMultilineEllipse,暂时不支持Layout里直接添加  linearLayout1.addView(tvMultilineEllipse);      }     }


PS:TextViewMultilineEllipse是在代码里动态构建和使用,而不能直接在Layout.xml里使用。

main.xml的源码如下:

 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TextView        android:id="@+id/tvNormal"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Medium Text"        android:textAppearance="?android:attr/textAppearanceMedium" />    <LinearLayout        android:id="@+id/linearLayout1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dip" >    </LinearLayout></LinearLayout>


TextViewMultilineEllipse.java源码如下,有点多,读者可以直接忽略:

public class TextViewMultilineEllipse extends TextView{    private TextPaint mTextPaint;    private String mText;    private int mAscent;    private String mStrEllipsis;    private String mStrEllipsisMore;    private int mMaxLines;    private boolean mDrawEllipsizeMoreString;    private int mColorEllipsizeMore;    private boolean mRightAlignEllipsizeMor
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值