U3D中解析json數據使用ScrollView動態展示

ScrollView中用Text組件動態展示多條文本信息

今天想使用ScrollView展示從json中解析出來的文本信息時,發現使用網格自動佈局的話沒有辦法根據每條信息的不同調整各條信息的網格大小,因爲網格佈局中cellsize是調整後,所有網格都會調整,於是改用vertical自動佈局,好處是可以自由設置每個Text組件的大小,就可以實現ScrollView中多條文本根據各自的文本長度調整文本框寬度(sizeDelta.y)。

先給出思路:因爲要動態,所以可以先創建一個UI Text的預設體,這樣可以根據解析出的信息條目數,動態生成相應的Text。然後根據每條文本條目的信息量計算Text的寬度。這樣就完成了我們的動態展示。

下面給出腳本代碼(我直接掛在Content上):

using UnityEngine;
using LitJson;
using UnityEngine.UI;

public class JsonParseToUI : MonoBehaviour {

	public GameObject textPrefab;

	string json = "{\n    \"reason\":\"Success\",\n    \"result\":{\n        \"data\":[\n            {\n                \"content\":\"問:什麼生物擁有超強的臂力、鋒利的指甲和尖銳的牙齒,以至於能撕碎一切堅硬牢固的東西?答:拆快遞時的妹子。\",\n                \"hashId\":\"e49b169e7379dac56e1402865b981bca\",\n                \"unixtime\":1554688803,\n                \"updatetime\":\"2019-04-08 10:00:03\"\n            },\n            {\n                \"content\":\"本人苦嗶快遞員,今天有筆快遞名字叫做:“爺爺“。這不是明擺着佔我的便宜嗎。我也不傻,電話一通就問:“請問你的快遞名是什麼?”他說:“爺爺。”我長長的嗯了一聲:“對了,有你的快遞!\",\n                \"hashId\":\"8123c9467dbd6d9d98356442985a5d6b\",\n                \"unixtime\":1554688803,\n                \"updatetime\":\"2019-04-08 10:00:03\"\n            },\n            {\n                \"content\":\"兩個女人在大街上吵架,那個罵的吐沫橫飛啊。一大媽看不下去了,可誰也不聽,都說自己對,對方錯。大媽淡淡地來了一句:“那麼這樣,醜的先說!”瞬間,整個世界都安靜了。。。\",\n                \"hashId\":\"be1bea562f0c032f8c99908689442081\",\n                \"unixtime\":1554688803,\n                \"updatetime\":\"2019-04-08 10:00:03\"\n            },\n            {\n                \"content\":\"閨蜜是個韓劇迷,她老公是個球迷。某天晚上有球賽,他倆因爲搶電視機遙控器打了起來。她一氣之下找我哭訴,我問她:“電視遙控器最後歸誰了?”她邊哭邊說:“老王。”我疑惑道:“這個老王是誰呀?我怎麼沒聽說過。”她哭的聲音更大了:“一個修電視機的……”\",\n                \"hashId\":\"9670f2fa883702f9fe82a8475dceb4f6\",\n                \"unixtime\":1554688803,\n                \"updatetime\":\"2019-04-08 10:00:03\"\n            },\n            {\n                \"content\":\"春節回老家時,看到一個老外在向一個農民伯伯問路。只見那個老外一邊說着生硬的中文,一邊用手筆劃,但那個農民伯伯卻還是不明白。最後,那個農民伯伯說了一句讓我至今難忘的話:“Can you speak English?”\",\n                \"hashId\":\"74857395e11645108f1b4c3310201559\",\n                \"unixtime\":1554688803,\n                \"updatetime\":\"2019-04-08 10:00:03\"\n            }\n        ]\n    },\n    \"error_code\":0\n}";



	void Start()
	{
		JsonData data = JsonMapper.ToObject(json);

		for (int i = 0; i < data["result"]["data"].Count; i++)
		{
			Text happytext = Instantiate(textPrefab, transform).GetComponent<Text>();

			happytext.text = "笑話" + (i+1) + ":" + data["result"]["data"][i]["content"].ToString();

			RectTransform textRect = happytext.GetComponent<RectTransform>();

			textRect.sizeDelta = new Vector2(280, (happytext.text.Length / 20 + 1) * 20);
		}


	}

}

好了,關於ScrollView中動態展示Text就說到這裏。

點個關注,給個讚唄!

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