Android TextView內容過長加省略號,點擊顯示全部內容

在Android TextView中有個內容過長加省略號的屬性,即ellipsize,用法如下:

在xml中:
android:ellipsize="end"     省略號在結尾
android:ellipsize="start"   省略號在開頭
android:ellipsize="middle"   省略號在中間
android:ellipsize="marquee"  跑馬燈
最好加一個TextView顯示行數的約束,例如:
android:singleline="true"或者android:lines="2"

在java文件中:
tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));
tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));
最好加一個TextView顯示行數的約束,例如:
tv.setSingleLine(true);

不僅對於textview有此屬性,對於editext也有,不過它不支持marquee。

文字展開和收縮

public class DemoActivity extends BaseActivity {

   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);

// 在xml文件中設置了android:singleline="true"   final TextView tv = (TextView)findViewById(R.id.task_2_title);   //tv.setMovementMethod(ScrollingMovementMethod.getInstance());   tv.setOnClickListener(new OnClickListener() {     Boolean flag = true;    @Override    public void onClick(View v) {     Log.i("tv.getLineCount()",tv.getHeight()+"");     if(flag){            flag = false;      tv.setEllipsize(null); // 展開      //tv.setSingleLine(flag);     }else{      flag = true;      tv.setEllipsize(TextUtils.TruncateAt.END); // 收縮      //tv.setSingleLine(flag);     }    }   });  } }

其實,只是把樣式清空而已。就能完全展開了。

有人可能要說,萬一我想初始幾行呢?放心,一樣可以。上代碼:

在xml文件中設置瞭如下屬性:

android:lines="4"      //我初始化的4行  

Activity那邊代碼一樣,只改一點

 if(flag){         flag = false;          tv.setEllipsize(null); // 展開          tv.setSingleLine(flag);         }else{           flag = true;           tv.setEllipsize(TextUtils.TruncateAt.END); // 收縮     }  設置setSingleLine的目的是爲了取消lines==“4”這個固定值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章