1. 程式人生 > >新東西003--android Gridview控制顯示高度

新東西003--android Gridview控制顯示高度

一:需求

最近產品決定對公司軟體做大修改,他想要實現網易雲學習的標籤欄效果,如下圖(在A區域需要有一系列標籤欄(標籤欄多少不定,但每行三個,顯示時如果超過螢幕2/3就要顯示進度條,也就是最大不超過螢幕2/3的顯示),B區域是一個listview,中間就是幾個button,當B區域往上滑動的時候A區域自動收起,但在最上方顯示當前選擇的標籤,點選標籤彈出浮動的標籤欄,當B區域滑動到最頂的時候,A區域開始顯示.)


在上面的需求上,主要有兩個問題

1.上面那一系列不知道多少個的是用button顯示還是其他元件顯示.作為一個資深(呵呵)開發者,肯定是不想用動態佈局,一個一個button往上加的,所以我用了gridview,每個裡面裝一個button

2.A區域是作為B區域的headview存在還是一個跟B區域同級的佈局存在.

開始的時候想把A區域當作B區域這個Listview的headview來處理,這樣就可以實現A跟隨B區域一起上下滑動,看起來就像一個完整的個體.但在實現的時候,在listview的滑動傳遞的時候出了問題,因為listview需要接受滾動事件,上面的gridview因為顯示高度不明確,所以可能需要接受滑動事件.總的來說,作為headview在固定高度的時候可以採用,但要實現這種隨機高度可能要壓縮的,還是不太好實現.所以我就放棄了.我就將A區域的gridview作為B區域的同級view存在,同時,為了實現產品的需求,只是在A展開收起的時候新增動畫即可.

Gridview控制顯示高度

我原本期望Gridview有maxline或者maxheight之類的屬性,那樣問題就變的簡單了,但是沒有.於是琢磨著在height屬性上做處理,想在佈局檔案中寫死肯定是不行的,因為高度個數未知,所以就採用了動態佈局.在解決動態佈局的問題上,就是動態控制高度.我所做的操作分為兩步

1.獲取螢幕的顯示高度

2.計算填充完資料之後的gridview的高度(一定要是填充完資料之後的,否則就是0,沒有意義),如果高度大於螢幕的2/3,則將gridview的height設定為螢幕的2/3,如果小於,則不改變heigt的值.(下面為部分程式碼)

public void setGridviewHeight()
	{
		int needHeight = (((labes.length + 2) / 3 + 1) * dp2Px(this, 40.0f));
		if (needHeight <= ((screenHeight * 4) / 7))
		{
			//表示空間顯示足夠,不做處理
		}
		else
		{
			LinearLayout.LayoutParams params = (android.widget.LinearLayout.LayoutParams) gridview.getLayoutParams();
			params.height = (screenHeight * 4) / 7 - dp2Px(this, 40.0f);
			params.width = screenWidth;
			gridview.setLayoutParams(params);
			
			//第二個gridview
			RelativeLayout.LayoutParams params2 = (android.widget.RelativeLayout.LayoutParams) gridview2.getLayoutParams();
			params2.height = params.height;
			params2.width = params.width;
			gridview2.setLayoutParams(params2);
		}
	}

3.浮動gridview的解決

實際上就是兩個gridview(浮動的那個根據邏輯顯示,隱藏即可)

總結:

功能看起來很炫,但是按照寫的流程分析,寫下來還是沒有難度的.後期有時間會整理一個例子再上傳