布局技巧與列表控件
五大布局
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