1. 程式人生 > >Textview文字的收起與展開功能

Textview文字的收起與展開功能

實現原理:用兩個Textview來控制顯示,預設顯示短文字(限制行數)的Textview,當點選展開時,顯示全部文字的Textview。

public class MainActivity extends Activity {

	private TextView shortTxt, longTxt, txtOpenOrClose;
	private LinearLayout linearLayout;
	//是否初始化,防止無限制的判斷資訊是否過長
	private boolean isInit=false;
	private static final String OPEN = "展開";
	private static final String CLOSE = "收起";

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		initViews();
		String str = "《幻影車神3》是一部在2013年12月20日聖誕節上映的印度電影·由阿米爾·汗、卡特莉娜·卡芙、"
				+ "塔布萊特·貝賽爾等寶萊塢明星主演,Vijay Krishna Acharya執導。影片講述了一個原本在馬戲團混日子的男人,"
				+ "為了給父親報仇,決心去芝加哥一家腐敗銀行搞破壞,兩位孟買警察對他一路追蹤。";
//		 String str="這句話很短!";
		shortTxt.setText(str);
		longTxt.setText(str);
	}

	private void initViews() {
		// TODO Auto-generated method stub
		linearLayout = (LinearLayout) findViewById(R.id.id_linearLayout);
		shortTxt = (TextView) findViewById(R.id.id_textview);
		longTxt = (TextView) findViewById(R.id.id_textview2);
		txtOpenOrClose = (TextView) findViewById(R.id.id_openOrClose);
		
		txtOpenOrClose.setVisibility(View.GONE);
		txtOpenOrClose.setOnClickListener(clickListener);
		//添加回調方法,此方法在每次繪製檢視的時候回撥,如點選展開時就會呼叫此方法。
		ViewTreeObserver observer = linearLayout.getViewTreeObserver();
		observer.addOnPreDrawListener(onPreDrawListener);
	}

	
	/**
	 *按鈕單擊事件 
	 */
	private OnClickListener clickListener = new OnClickListener() {

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			//如果顯示的是 展開
			if (txtOpenOrClose.getText().equals(OPEN)) {
				//修改為 收起
				txtOpenOrClose.setText(CLOSE);
				//隱藏短文字的文字框
				shortTxt.setVisibility(View.GONE);
				//顯示長文字的文字框
				longTxt.setVisibility(View.VISIBLE);
			} else if (txtOpenOrClose.getText().equals(CLOSE)) {
				txtOpenOrClose.setText(OPEN);
				shortTxt.setVisibility(View.VISIBLE);
				longTxt.setVisibility(View.GONE);
			}
		}
	};

	/**
	 * 檢視繪製回撥方法
	 */
	private OnPreDrawListener onPreDrawListener = new OnPreDrawListener() {

		@Override
		public boolean onPreDraw() {
			// TODO Auto-generated method stub
			//如果已經初始化佈局,則不執行後面的方法
			if(isInit){
				return true;
			}
			//如果超過三行就顯示 “展開”  的按鈕
			if (isShowAll(shortTxt, longTxt)) {
				txtOpenOrClose.setVisibility(View.VISIBLE);
			}
			
			isInit=true;
			return true;
		}
	};

	/**
	 * 判斷文字是否超過三行,返回布林值
	 * @param shortTxt
	 * @param longTxt
	 * @return
	 */
	public boolean isShowAll(TextView shortTxt, TextView longTxt) {

		int shortHeight = shortTxt.getHeight();
		int longHeight = longTxt.getHeight();
		if (longHeight > shortHeight) {
			shortTxt.setVisibility(View.VISIBLE);
			longTxt.setVisibility(View.GONE);
			return true;
		} else {
			shortTxt.setVisibility(View.GONE);
			longTxt.setVisibility(View.VISIBLE);
			return false;
		}
		
	}
	
	
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/id_linearLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/id_textview"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:maxLines="3"
            android:textSize="16sp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/id_textview2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:textSize="16sp"
            android:textColor="#000000" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp" >

        <TextView
            android:id="@+id/id_openOrClose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="展開"
            android:textColor="#0099FF" />
    </RelativeLayout>

</LinearLayout>


相關推薦

Textview文字收起展開功能

實現原理:用兩個Textview來控制顯示,預設顯示短文字(限制行數)的Textview,當點選展開時,顯示全部文字的Textview。 public class MainActivity extends Activity { private TextView sho

文章收起展開效果的實現

方式一(display): <style> div{width:800px;} p{text-indent:2em;} #box1{display:none;} </style> <div id="box

掃雷程式------展開功能第一步免死功能的實現

完整工程檔案: https://github.com/Yubao-wss/Game/tree/master/Demine/Demine 如下程式碼為排雷函式: void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int

自定義控制元件讓TextView的drawableLeft文字一起居中顯示

Drawable[] drawables = getCompoundDrawables();          if  (drawables != 

TextSwitcher 文字切換器的功能用法

TextSwitcher集成了ViewSwitcher, 因此它具有與ViewSwitcher相同的特性:可以在切換View元件時使用動畫效果。與ImageSwitcher相似的是,使用TextSwitcher也需要設定一個ViewFactory。與ImageSwitcher不同的是,TextSwitcher

layui富文字編輯器layedit增加上傳視訊音訊功能

改動效果: layui2.4.3並沒有視訊、音訊等上傳功能,不過還好,目前有一個基於layui2.4.3的layedit擴充套件,增加了視訊上傳、字型顏色等等。 首先去下載一個layedit擴充套件檔案:中轉站 根據說明替換layedit.js,直接呼叫就會出現上面的效果,注意,編

android,textView文字drawableLeft圖片無法對齊

textView文字相對於控制元件有內邊距,導致看起來和本來設定對齊的圖片不是對齊的,這時可用android:includeFontPadding="false"屬性去掉textview內邊距,使他們對齊。 去掉textview或者button的空白: android:p

TextView的drawableLeft文字一起居中顯示(以及程式碼設定drawableLeft)

網上一搜全是自定義控制元件,其實去看看TextView的屬性,就能發現,解決這個問題,直接xml檔案中就能搞定,程式碼如下: <!-- 不明白的屬性請自行查閱資料--> <TextView android:id="@+id/tv_finish"

Linux---RPM、SRPM、YUM功能

擴展 3.1 srpm src.rpm borde linux系統 主機 pack cell RPM: RedHat Package Manager 優點: 1. 由於已經編譯完成並且打包完畢,所以軟件傳輸與安裝上很方便 2. 由於軟件信息都已經記錄在Linux主

SVN的安裝常用功能使用以及解決安裝配置過程中的一些錯誤

三種方式 安裝配置 ava -- 服務器 工作流程圖 例如 完成 網站 SVN簡介: SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,將工程代碼集中在服務器上進行一個統一的集中式管理,從而能夠方便地控制代碼版本,相較於RCS、CVS,它采用了分支管理系統

Cisco 的基本配置實例之五----交換機的路由功能DHCP 功能

sign 網關 tin enter com -- config cisco assigned 5、配置交換機的路由功能 說明:只有在三層交換機上才有路由功能,其他的二層接入交換機要想在不同的vlan之間傳送數據需要通過trunk口到核心交換機上進行完路由交換後才可以。

配置 HTTP DNS 功能

分享圖片 com interface ip地址 www 技術 mar http服務 size 實驗步驟: 1、配置網絡設備 Gateway: -客戶端網關 interface gi0/0/0 undo shutdown ip address 192.168.2.254

redis發布訂閱、HyperLogLogGEO功能的介紹

erl 本質 百萬 redis 接收消息 image radius 獲取地理位置 訂閱 一、發布訂閱 1、模型 發布者發布消息,訂閱者接收消息 2、API 2.1、publish 2.2、訂閱 2.3、取消訂閱 unsubsribe 2.4、其他api

設置TextView文字居中

控件 2種 tex you pos txt 方法 xml文件 post 有2種方法可以設置TextView文字居中: 一:在xml文件設置: Android:gravity="center" 二:在程序中設置: m_TxtTitle.setGravity(Gravit

CAD2014學習筆記-文字編輯尺寸標註

一個點 基線 連續 文字 學習 tab 技術分享 插入表格 開啟 基於 虎課網huke88.com CAD教程 文字與表格 輸入文字:TEXT、MTEXT 插入表格:table 新建表格樣式 尺寸標註 測量工具:Di、DLI 開啟標註:打開工具-

IDSIPS功能分析

保護 時間 員工 替代 流量 相對 傳輸 還要 class IDS與IPS功能分析 本文主要對比分析了入侵檢測系統、 入侵防禦系統以及 “防火墻+入侵檢測系統” 聯動防護機制這三種網絡安全方案,討論了其優缺點和未來發展方向。 本文主要對比分析了入侵檢測系統、 入侵防禦系統以

TextView文字橫向自己主動滾動

int mod -- ont -c xtend img 自己 chmod ??????????效果截圖: ? ??????????????????????????

Java中的日歷類/集合類/數學類/正則表達式/數組工具類等的常用方法基本功能

calendar類和Data類 Collection類和List 正則表達式regex Math類和Random類 System類和Iterator類 一、 Arrays 針對數組操作的工具類,提供了一些針對數組排序和二分搜索的方法。常用方法:1、public static String

DNS的主從,轉發負載功能

功能 應用 systemctl 作用 url 語句 client 重啟 top 接著原來《DNS原理與應用》的文章,本章內容主要通過實現DNS的主從,轉發,及基於域名解析不同的ip實現後端服務負載均衡的效果。最後再實現DNS的高級功能:類似CDN原理實現基於IP實現區域分流

HTML中的floatclear功能

9.png 技術分享 圖片 ear bubuko 17. .com oat 進行 首先進行float操作不進行clear操作,如下 效果如下: 但是在加入clear操作之後,如下: 效果如下: clear操作進行相當於添加一條分界線,使板塊進行理論上的分