布局技巧與列表控件
五大布局
FrameLayout(框架布局)逆屡、LinearLayout(線性布局)誉察、RelativeLayout(相對(duì)布局)与涡、TableLayout(表格布局)、AbsoluteLayout(絕對(duì)布局)。
視圖的創(chuàng)建
在Android系統(tǒng)中驼卖,何的可視化控件都是從android.view.View繼承的氨肌。開(kāi)發(fā)人員可以使用兩種方法來(lái)創(chuàng)建視圖。
第一種:是使用XML方式來(lái)配置View的相關(guān)屬性酌畜,然后裝載這些View
第二種:是完全使用java代碼來(lái)創(chuàng)建View
長(zhǎng)度單位
px:表示屏幕實(shí)際的象素怎囚。
dp(dip):是屏幕的物理尺寸。大小為1英寸的1/72桥胞。
sp(與刻度無(wú)關(guān)的像素):與dp類似恳守,但是可以根據(jù)用戶的字體大小首選項(xiàng)進(jìn)行縮放。
設(shè)置表示長(zhǎng)度贩虾、高度等屬性時(shí)可以使用dp或sp催烘。但如果設(shè)置字體,需要使用sp缎罢。
dp是與密度無(wú)關(guān)伊群,sp除了與密度無(wú)關(guān)外,還與scale無(wú)關(guān)
如果使用dp和sp屁使,系統(tǒng)會(huì)根據(jù)屏幕密度的變化自動(dòng)進(jìn)行轉(zhuǎn)換在岂。
布局中常用屬性
android:gravity與 android:layout_gravity的區(qū)別
android:layout_gravity是指定本元素相對(duì)它的父元素的對(duì)齊方式奔则。比如一個(gè)button 在linearlayout里蛮寂,你想把該button放在linearlayout里靠左、靠右等位置就可以通過(guò)該屬性設(shè)置易茬。
android:gravity是指定本元素的子元素相對(duì)它的對(duì)齊方式酬蹋。屬性是對(duì)該view中內(nèi)容的限定.比如一個(gè)button 上面的text. 你可以設(shè)置該text 相對(duì)于view的靠左,靠右等位置抽莱。android:gravity="top"(buttom范抓、left、right食铐、center_vertical匕垫、fill_vertical、center_horizontal虐呻、fill_horizontal象泵、center、fill斟叼、clip_vertical偶惠、clip_horizontal)控制布局中控件的對(duì)齊方式。如果是沒(méi)有子控件的控件設(shè)置此屬性朗涩,表示其內(nèi)容的對(duì)齊方式忽孽,比如說(shuō)TextView里面文字的對(duì)齊方式;若是有子控件的控件設(shè)置此屬性,則表示其子控件的對(duì)齊方式兄一,如果需要設(shè)置多個(gè)屬性值厘线,用“|”進(jìn)行組合
Relativelayout中的相對(duì)位置屬性
第一類 : 屬性值為 true 或 false
android:layout_centerVertical?垂直居中
android:layout_centerInparent?相對(duì)于父元素完全居中
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?本元素的上邊緣和某元素的的上邊緣對(duì)齊
android:layout_alignLeft?本元素的左邊緣和某元素的的左邊緣對(duì)齊
android:layout_alignBottom?本元素的下邊緣和某元素的的下邊緣對(duì)齊
android:layout_alignRight?本元素的右邊緣和某元素的的右邊緣對(duì)齊
第三類:屬性值為具體的像素值,如 30dip 瘾腰, 40px
android:layout_marginBottom?離某元素底邊緣的距離
android:layout_marginLeft?離某元素左邊緣的距離
android:layout_marginRight?離某元素右邊緣的距離
android:layout_marginTop?離某元素上邊緣的距離?
無(wú)比重要的ListView
1.ListVeiw:用來(lái)展示列表的View皆的。
2.適配器:用來(lái)把數(shù)據(jù)映射到ListView上的中介。
3.?dāng)?shù)據(jù):?具體的將被映射的字符串蹋盆,圖片费薄,或者基本組件。
根據(jù)列表的適配器類型栖雾,列表分為三種楞抡,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最為簡(jiǎn)單析藕,只能展示一行字召廷。SimpleAdapter有最好的擴(kuò)充性,可以自定義出各種效果账胧。 SimpleCursorAdapter可以認(rèn)為是SimpleAdapter對(duì)數(shù)據(jù)庫(kù)的簡(jiǎn)單結(jié)合竞慢,可以方面的把數(shù)據(jù)庫(kù)的內(nèi)容以列表的形式展示出來(lái)。
ArrayAdapter的 構(gòu)造需要三個(gè)參數(shù)治泥,依次為上下文,布局文件筹煮,數(shù)據(jù)源。同時(shí) 用setAdapter()完成適配的最后工作居夹。
ListView優(yōu)化
復(fù)用
防止convertView多次加載:
if(converView==null){
converView = mLayoutInflater.inflate(R.layout.xxx.xml,null);
重寫(xiě)ViewHolder
每次在getVIew的時(shí)候败潦,都需要重新的findViewById,重新找到控件准脂,然后進(jìn)行控件的賦值以及事件相應(yīng)設(shè)置劫扒。這樣其實(shí)在做重復(fù)的事情,因?yàn)榈膅eiview中狸膏,其實(shí)包含有這些控件沟饥,而且這些控件的id還都是一樣的,也就是其實(shí)只要在view中findViewById一次湾戳,后面無(wú)需要每次都要findViewById了贤旷。
寫(xiě)發(fā)的特點(diǎn),通常有一個(gè)內(nèi)部類classViewHolder,這個(gè)ViewHolder,用來(lái)標(biāo)識(shí)view中一些控件院塞,方便進(jìn)行一些事件相應(yīng)操作的設(shè)置遮晚,比如onClick等等,這樣可以不用每次都要findViewById了拦止,減少了性能的消耗县遣。同時(shí)重用了convertView糜颠,很大程度上的減少了內(nèi)存的消耗。
ListView常用屬性萧求、方法
屬性
Android:listSelector="@android:color/transparent"
屬性說(shuō)明:當(dāng)item被點(diǎn)擊后其兴,改變item的背景顏色(取值范圍包括圖片),上面設(shè)置的是透明的夸政,代表取消android:listSelector的效果元旬,。
android:scrollingCache="false"
android:cacheColorHint="#00000000"
屬性說(shuō)明:當(dāng)列表數(shù)據(jù)太多拖動(dòng)listView時(shí)守问,會(huì)發(fā)現(xiàn)背景變黑匀归,這是因?yàn)閘istView自帶的緩存導(dǎo)致,設(shè)置上面的任意一個(gè)屬性耗帕,即可避免這種情況
android:fadingEdge="none"
屬性說(shuō)明:滾動(dòng)listview時(shí)穆端,上邊和下邊有黑色的陰影,當(dāng)值為none時(shí)代表去掉陰影
android:divider="@drawable/list_diriver_bg"
屬性說(shuō)明:listview item之間的分割線設(shè)置(可以是圖片仿便,可以是顏色)体啰,當(dāng)值為@null 時(shí)代表沒(méi)有分割線
android:dividerHeight="3dp"
屬性說(shuō)明:listview item之間的分割線高度
android:fastScrollEnabled="true"
屬性說(shuō)明:當(dāng)listview數(shù)據(jù)太多時(shí),開(kāi)啟快速滑動(dòng)嗽仪,true代表開(kāi)啟
方法
addHeaderView
addFooterView