標籤:android 布局 控制項 listview 最佳化
一、布局檔案實現步驟:
1、在res/layout目錄下建立一個demo_layout.xml布局檔案,
2、使用RelativeLayout嵌套一個LinearLayout來進行布局,往裡添加一個TextView和兩個Button,並設定屬性。
3、建立一個FirstLayoutActivity類,在onCreateView()方法中,使用findViewById()執行個體化組件。
4.Activity跳轉:
1.1建立一個Activity,並且註冊
1.2通過intent指定從哪個Activity跳轉到新的Activity
1.3再通過Activity的startActivity(Intent intent)方法來啟動
5.按鈕點擊監聽
1.1在布局檔案中,部署一個按鈕(Button)。
1.2為按鈕添加一個ID,用來在Activity中通過findViewById()來尋找到按鈕的執行個體。
1.3建立一個點擊監聽View.OnClickListener()
1.4調用按鈕的setOnClickListener()方法來為按鈕設定一個監聽器
二、布局類型:
1.AbsoluteLayout,絕對布局,使用座標系規範螢幕,原點在左上方,x向右是正方向,y向下是正方向。
1.1關鍵屬性:
layout_x,layout_y,在AbsoluteLayout中放置控制項時,這兩個屬性是AbsoluteLayout特有的,只能在AbsoluteLayout中的控制項才能使用。他們用來確定指定的控制項的擺放座標(控制項左上方的座標)。
1.2優缺點:
優點:使用AbsoluteLayout,能夠最自由地去擺放我們介面上的控制項。
缺點:由於AbsoluteLayout是使用座標系的方式來確定子控制項的擺放位置,但是由於Android平台螢幕的片段化,不能確定使用者的螢幕解析度,那麼貿然使用這種布局類型,可能讓使用者感受不一樣,影響使用者體驗。
2.LinearLayout,線性布局,所有的子控制項都排成一列整齊擺放。
2.1關鍵屬性:
LinearLayout屬性:
android:orientation="vertical"["horizontal"]
表示LinearLayout中的子控制項的擺放方向,vertical垂直擺放(從上到下)。horizontal水平擺放(從左至右)。
android:baselineAligned="true"["false"]
表示LinearLayout中的子控制項的擺放要依據基準來對齊。
true是對齊,false不對齊。
android:baselineAlignedChildIndex="childIndex"
表示以哪一個子控制項的基準來對齊。
android:gravity="center_horizontal"
表示子控制項對齊的方向,可以向左,右,上,下,置中...
子控制項屬性:
android:layout_weight="1.0"
這個屬性只有在LinearLayout中有效,他表示子控制項所需要佔據的大小,用於與其他的控制項分割父控制項的空間。
2.2優缺點:
優點:線性布局,受到螢幕解析度影響最小。子控制項排列整齊。
缺點:子控制項只能按照指定的幾種方式擺放,可能無法適應商業項目中部分花樣繁多的功能介面的需求。
3.FrameLayout,幀布局,放置在內部的所有控制項都會分層擺放,一個控制項一層。後放入的控制項會擺放在最上面的層裡。如果最上面的一層的控制項不夠大,也能夠看到他下面的其他控制項。
3.1關鍵屬性:
FrameLayout屬性:
android:foreground,可以使用這個屬性在整個布局的前面添加一個圖片或者顏色。
android:foregroundGravity,調整由android:foreground設定的圖片的對齊方向。
3.2優缺點
優點:有多重動畫控制項都由FrameLayout實現,說明FrameLayout很適合播放動畫的功能介面實現。
缺點:約束比較強,控制項擺放的方式只有這一種,對內部控制項操作的手段也比較少。
4.RelativeLayout,相對布局,通過父控制項的邊或者以前設定的控制項的位置,來確定現在放入的新的控制項的位置
4.1子控制項的屬性:
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight,貼到指定的父控制項的邊緣。
android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf
android:layout_toEndOf,放置在指定id的控制項的指定方向上。
android:layout_above
android:layout_below,放置在指定id的控制項的上或下。
android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
android:layout_alignBottom,與指定id的控制項邊緣對齊。
android:layout_centerInParent,將我們的控制項放置在父控制項的中間。
4.2優缺點
優點:內部子控制項都是自己相對擺放,在螢幕解析度出現巨大變化的時候,他們之間的相對位置都不會變。這個布局類型可以很大的減少我們螢幕出現變化時,介面效果的差異性。
缺點:當我們的控制項之間的相對關係建立之後,不容易再做修改。
5.Tablelayout,表格布局,不過必須配合TableRow使用,否則就是一個垂直排列的線性布局。
5.1關鍵屬性:
TableLayout:
android:stretchColumns="0"展開列,列號從0開始。
android:collapseColumns="0"隱藏列,同上。
android:shrinkColumns="0"收縮列,同上。
TableRow:
android:weightSum="5",此屬性與控制項的 android:layout_weight="1"一起使用,用來設定一行的所有控制項的大小。(只有新版本可以使用,在4.0版本後可以使用)
6.GridLayout,網格布局,不需要TableRow這麼麻煩
6.1關鍵方法
android:columnCount="3"
android:rowCount="5"
可以通過上面兩個方法方便設定我們網格布局的行數和列數。
子控制項也可以使用android:layout_column="1"來設定子控制項想排在第幾個。
三、常用控制項:
1. Button ,按鈕
常用Button有3中:
1.1當你只需要在按鈕上放置文字資訊時,可以使用Button。
1.2當你只需要在按鈕上放置圖片時,可以使用ImageButton。
1.3當你需要在按鈕上同時放置文字和圖片時,可以使用Button。
只有文字資訊的按鈕:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
只含有圖片的按鈕:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
同時含有文字和圖片的按鈕:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
1.4常用屬性:
1.使用android:onClick屬性,方便地響應按鈕的單擊事件。
1.1.在XML檔案中的Button標籤中加入android:onClick屬性。
1.2.在載入這個XML檔案的Activity中加入一個固定格式的方法:
public void 回應程式法名(View view){}
1.3.將回應程式法的名字填入android:onClick的值中。
使用android:backgroud來設定一個新的外觀。
新的外觀圖片製作一個selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/pic1"></item>
<item android:state_pressed="false" android:drawable="@drawable/pic2"></item>
</selector>
1.5 onClickListener
1,5.1 擷取Button對象。
1.5.2. 建立View.OnClickListener的對象。
1.5.3. 然後將View.OnClickListener的對象交給Button對象。
2. EditText:可輸入文字框,這個控制項可以讓使用者輸入文本資訊。
<EditText
android:id="@+id/email_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
2.1屬性:
android:hint="@string/email_hint"屬性:編輯框加入一個提示資訊。
android:inputType="textEmailAddress" 調整軟鍵盤樣式,得到只有數字或者方便輸入郵箱地址的軟鍵盤。
android:imeOptions="actionSend"自訂軟鍵盤中確認按鈕。
android:password="true"以密文形式輸入資訊。改回false之後,以明文形式輸入。
我們加入了IMEOptions屬性後,我們需要一個監聽器來監聽這個按鈕的響應:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
handled = true;
}
return handled;
}
});
除EditText外,我們還有AutoCompleteTextView作為文字資訊輸入的控制項
3. TextView,文字框。
3.1常用屬性:
android:text 文本資訊
android:textSize 字型大小(單位sp)
android:textColor 字型顏色
android:autoLink 能使文字中的電話號碼,網址,郵箱變成類似於超連結的樣子。
android:lines 行數
android:maxLength 最大字數
4. CheckBox,多選框。
4.1可以使用設定onClick的方式加入一個寫在Activity中的點擊響應
方法。
4.2我們可以使用多選框的監聽器:OnCheckedChangeListener
4.3自訂樣式:
在android:button屬性上設定Selector。
5. RadioButton,單選框。
這個控制項不能單獨使用,需要與RadioGroup一起使用。給RadioGroup加入一個OnCheckedChangeListener來監聽我們的選擇監聽。
一定要注意這個監聽器和多選框的可不是一個,注意他們的包名!
6.DatePicker,TimePicker 日期和時間
在布局檔案中定義DatePicker和TimePicker,然後通過Canlendar類獲得系統時間,通過init方法將日期傳給DatePicker,
並設定OnDateChangedListener來監聽日期改變,當時間被改變時需要設定setOnTimeChangedListener監聽來設定時間。
<DatePicker
android:id= "@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TimePicker
android:id= "@+id/timerPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
7. ListView,清單控制項,實現一個資料列表,方便修改資料,同時影響介面。
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/Cities" >
</ListView>
7.1 常用屬性
android:divider="@color/mycolor" 間隔線的圖片或者顏色
android:dividerHeight="3dip"間隔線的寬度用於修改ListView中每個item之間的間隔線。
android:stackFromBottom="true"從列表最下方開始。
android:transcriptMode="alwaysScroll"一直顯示新來的資料。
android:cacheColorHint="@android:color/transparent" 滑動時,背景透明。
7.2 使用適配器的方式顯示ListView:
1.在布局檔案中,定義一個簡單的ListView標籤。
2.在Activity中實現一個我們自己擴充的BaseAdapter子類對象。
3.通過findViewById在Activity中找到布局檔案中的ListView對象。
4.將配接器物件設定給我們的ListView對象。
ListView,只能通過適配器,載入他的子控制項。
7.3 ListView動態內容的動態添加
1.由使用者或伺服器擷取的資料,更新我們的資料容器。
2.然後調用Adapter.notifyDataSetChanged();來提醒ListView資料已經更新,
介面需要重新整理。
7.4 ListView效能最佳化:
1.複用convertView
在getView的參數列表中,提供給我們了一個convertView,這個視圖對象提供了一種效能最佳化的手段:複用剛推出螢幕範圍的那個convertView。
2.減少findViewById的使用次數
在convertView中有一個Object類型的tag屬性,可在這個屬性上儲存一個對象。利用這個對象存一個定義的內部類對象,這個對象儲存
convertView的子控制項對象。這樣複用convertView的時候也就可以複用以前取出的子控制項對象了。
8.AdapterView
Adapter是適配器,適配器是用來串連兩個不相干的事物的橋樑。同時,適配器是用來串連我們的AdapterView和資料。
AdapterView中我們常用的有:ListView(清單控制項),GridView(網格控制項),
Gallery(畫廊)。
android 基礎知識(一)