布局技巧與列表控件

布局技巧與列表控件


五大布局


FrameLayout(框架布局)、LinearLayout(線性布局)、RelativeLayout(相對布局)、TableLayout(表格布局)、AbsoluteLayout(絕對布局)。


視圖的創(chuàng)建


在Android系統(tǒng)中,何的可視化控件都是從android.view.View繼承的。開發(fā)人員可以使用兩種方法來創(chuàng)建視圖。

第一種:是使用XML方式來配置View的相關(guān)屬性,然后裝載這些View

第二種:是完全使用java代碼來創(chuàng)建View


長度單位


px:表示屏幕實際的象素。

dp(dip):是屏幕的物理尺寸。大小為1英寸的1/72。

sp(與刻度無關(guān)的像素):與dp類似,但是可以根據(jù)用戶的字體大小首選項進(jìn)行縮放。

設(shè)置表示長度、高度等屬性時可以使用dp或sp。但如果設(shè)置字體,需要使用sp。

dp是與密度無關(guān),sp除了與密度無關(guān)外,還與scale無關(guān)

如果使用dp和sp,系統(tǒng)會根據(jù)屏幕密度的變化自動進(jìn)行轉(zhuǎn)換。


布局中常用屬性


android:gravity與 android:layout_gravity的區(qū)別

android:layout_gravity是指定本元素相對它的父元素的對齊方式。比如一個button 在linearlayout里,你想把該button放在linearlayout里靠左、靠右等位置就可以通過該屬性設(shè)置。

android:gravity是指定本元素的子元素相對它的對齊方式。屬性是對該view中內(nèi)容的限定.比如一個button 上面的text. 你可以設(shè)置該text 相對于view的靠左,靠右等位置。android:gravity="top"(buttom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal)控制布局中控件的對齊方式。如果是沒有子控件的控件設(shè)置此屬性,表示其內(nèi)容的對齊方式,比如說TextView里面文字的對齊方式;若是有子控件的控件設(shè)置此屬性,則表示其子控件的對齊方式,如果需要設(shè)置多個屬性值,用“|”進(jìn)行組合

Relativelayout中的相對位置屬性

第一類 : 屬性值為 true 或 false

android:layout_centerVertical?垂直居中

android:layout_centerInparent?相對于父元素完全居中

android:layout_alignParentBottom?貼緊父元素的下邊緣

android:layout_alignParentLeft?貼緊父元素的左邊緣

android:layout_alignParentRight?貼緊父元素的右邊緣

android:layout_alignParentTop?貼緊父元素的上邊緣

android:layout_alignWithParentIfMissing?若找不到兄弟元素以父元素做參照物

第二類:屬性值必須為 id 的引用名“ @id/id-name ”

android:layout_below?在某元素的下方

android:layout_above?在某元素的上方

android:layout_toLeftOf?在某元素的左邊

android:layout_toRightOf?在某元素的右邊

android:layout_alignTop?本元素的上邊緣和某元素的的上邊緣對齊

android:layout_alignLeft?本元素的左邊緣和某元素的的左邊緣對齊

android:layout_alignBottom?本元素的下邊緣和某元素的的下邊緣對齊

android:layout_alignRight?本元素的右邊緣和某元素的的右邊緣對齊

第三類:屬性值為具體的像素值,如 30dip , 40px

android:layout_marginBottom?離某元素底邊緣的距離

android:layout_marginLeft?離某元素左邊緣的距離

android:layout_marginRight?離某元素右邊緣的距離

android:layout_marginTop?離某元素上邊緣的距離?


無比重要的ListView


1.ListVeiw:用來展示列表的View。

2.適配器:用來把數(shù)據(jù)映射到ListView上的中介。

3.?dāng)?shù)據(jù):?具體的將被映射的字符串,圖片,或者基本組件。

根據(jù)列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter

其中以ArrayAdapter最為簡單,只能展示一行字。SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果。 SimpleCursorAdapter可以認(rèn)為是SimpleAdapter對數(shù)據(jù)庫的簡單結(jié)合,可以方面的把數(shù)據(jù)庫的內(nèi)容以列表的形式展示出來。

ArrayAdapter的 構(gòu)造需要三個參數(shù),依次為上下文,布局文件,數(shù)據(jù)源。同時 用setAdapter()完成適配的最后工作。


ListView優(yōu)化


復(fù)用

防止convertView多次加載:

if(converView==null){

converView = mLayoutInflater.inflate(R.layout.xxx.xml,null);

重寫ViewHolder

每次在getVIew的時候,都需要重新的findViewById,重新找到控件,然后進(jìn)行控件的賦值以及事件相應(yīng)設(shè)置。這樣其實在做重復(fù)的事情,因為的geiview中,其實包含有這些控件,而且這些控件的id還都是一樣的,也就是其實只要在view中findViewById一次,后面無需要每次都要findViewById了。

寫發(fā)的特點,通常有一個內(nèi)部類classViewHolder,這個ViewHolder,用來標(biāo)識view中一些控件,方便進(jìn)行一些事件相應(yīng)操作的設(shè)置,比如onClick等等,這樣可以不用每次都要findViewById了,減少了性能的消耗。同時重用了convertView,很大程度上的減少了內(nèi)存的消耗。


ListView常用屬性、方法


屬性

Android:listSelector="@android:color/transparent"

屬性說明:當(dāng)item被點擊后,改變item的背景顏色(取值范圍包括圖片),上面設(shè)置的是透明的,代表取消android:listSelector的效果,。

android:scrollingCache="false"

android:cacheColorHint="#00000000"

屬性說明:當(dāng)列表數(shù)據(jù)太多拖動listView時,會發(fā)現(xiàn)背景變黑,這是因為listView自帶的緩存導(dǎo)致,設(shè)置上面的任意一個屬性,即可避免這種情況

android:fadingEdge="none"

屬性說明:滾動listview時,上邊和下邊有黑色的陰影,當(dāng)值為none時代表去掉陰影

android:divider="@drawable/list_diriver_bg"

屬性說明:listview item之間的分割線設(shè)置(可以是圖片,可以是顏色),當(dāng)值為@null 時代表沒有分割線

android:dividerHeight="3dp"

屬性說明:listview item之間的分割線高度

android:fastScrollEnabled="true"

屬性說明:當(dāng)listview數(shù)據(jù)太多時,開啟快速滑動,true代表開啟

方法

addHeaderView

addFooterView

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容