在專案中遇到了乙個需求,就是模仿系統的選擇應用開啟檔案的彈出框來實現自己的乙個類似的彈出框;要求和系統的一樣,高度可以自適應的變化;系統的如下:
最開始的設計思路是,自己用**計算listview的高度,在頁面構建的時候,動態設定進去。不過後面想了下,如果能夠不自己計算高度,不動態設定,是不是效能會好一些呢?
分析類似的布局,頂部,中間,底部;其中頂部和底部的高度不變,就只是中間變化。中間頁面專案多時,高度變高;中間頁面專案少時,高度變低;按照常規,我們中間會用到listview;
常規的思維,我們會認為這種頁面的布局方式最好是,父容器是乙個relativelayout,頂部頁面在最上,底部頁面設定為最底下,中間頁面設定在兩者之間;這樣可以保證無論如何介面上的三個元素相對位置不會發生變化。
但是有乙個問題,這樣的話,就需要用**動態設定高度了,因為頂部和底部的介面一旦分別設定在relativelayout的頂部和底部,那麼整個relativelayout的介面就會佔滿整個螢幕。
因此我仔細想了一下,我們不妨利用linearlayout來作為父容器實現這樣的效果。
首先,我們很容易設計出頂部和中間的布局:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="match_parent"
//注意,高度是自適應
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cdcdcd"
android:text="頭部!"
android:textsize="30sp" />
//高度設定自適應
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
listview>
linearlayout>
這樣設計的話,整體頁面的高度會隨著listview的內容高度動態變化,就剩下底部怎麼實現了;
我們可以這樣設計,設定中間的頁面距離底部的高度是乙個數值,然後將底部的介面設定距離頂部是負值就可以解決問題:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#cdcdcd"
android:text="頭部!"
android:textsize="30sp" />
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginbottom="60dp">
listview>
android:layout_width="match_parent"
android:layout_margintop="-60dp"
android:layout_height="wrap_content"
android:background="#adadad"
android:minwidth="40dp" />
linearlayout>
如此,則可以達到系統選擇框的布局效果,並且效能應該是最好的
Android效能優化之布局優化
在乙個典型的顯示系統中,一般包括cpu gpu和display三個部分 display可以理解為螢幕或者顯示器,cpu是用來計算影象資料的,然後把計算好的資料交給gpu,gpu會對圖形資料進行渲染,再把渲染好的資料存到buffer 快取區 裡面,最後display也就是螢幕負責把buffer裡面的資...
Android布局優化之ViewStub的使用
最近剛好有看到viewstub,因此根據個人理解記錄下筆記。viewstub是android布局優化的方式之一。它可以讓部分布局延遲載入,從而提高頁面渲染速度。因為viewstub是用於延遲載入使用,因此適用場景是一些不需要即時展示的頁面。舉個例子,大家都用過登入頁面。假設第一次你輸入登入使用者名稱...
Android布局優化
android布局一般是xml布局,然後呼叫setcontentview 方法,雖然這個呼叫很簡單,讓我們具體看一下setcontentview 方法的具體工作步驟 1 android讀取應用的資源資料 apk檔案內,儲存在內部儲存器或sd卡中 2 解析資源資料,展開布局 3 布局展開成為activ...