安卓----第二章(布局技巧與列表控件)

1.五大布局


android中的布局包括:LinearLayout(線性布局)闭树、RelativeLayout(相對布局)蚌斩、FrameLayout(框架布局)件舵、AbsoluteLayout(絕對布局)秀姐、TableLayout(表格布局)养泡,在實際中主要實用的是前面三種埂奈。

1.1LinearLayout(線性布局)

LinearLayout方法全解

特點:

線性方向上依次排列

一些需要注意的點:

weight(權重)的解釋:按比例劃分水平方向:將涉及到的View的android:width屬性設置為0dp,然后設置為android weight屬性設置比例即可;類推,豎直方向,只需設android:height為0dp,然后設weight屬性迄损!

android:orientation="vertical" 時, 只有水平方向的設置才起作用账磺,垂直方向的設置不起作用芹敌。 即:left,right垮抗,center_horizontal 是生效的氏捞。 當 android:orientation="horizontal" 時, 只有垂直方向的設置才起作用冒版,水平方向的設置不起作用液茎。 即:top,bottom辞嗡,center_vertical 是生效的捆等。

1.2RealtiveLayout(相對布局)

RelativeLayout方法圖

一些需要注意的點:

margin與padding的區(qū)別

初學者對于這兩個屬性可能會有一點混淆,這里區(qū)分下: 首先margin代表的是偏移,比如marginleft = "5dp"表示組件離容器左邊緣偏移5dp; 而padding代表的則是填充,而填充的對象針對的是組件中的元素,比如TextView中的文字 比如為TextView設置paddingleft = "5dp",則是在組件里的元素的左邊填充5dp的空間续室! margin針對的是容器中的組件栋烤,而padding針對的是組件中的元素,要區(qū)分開來挺狰!

1.3FrameLayout(框架布局)

又稱為幀布局明郭,該布局直接在屏幕上開辟出一塊空白的區(qū)域,當我們往里面添加控件的時候,會默認把他們放到這塊區(qū)域的左上角,而這種布局方式卻沒有任何的定位方式,所以它應用的場景并不多;幀布局的大小由控件中最大的子控件決定,如果控件的大小一樣大的話,那么同一時刻就只能看到最上面的那個組件!后續(xù)添加的控件會覆蓋前一個!雖然默認會將控件放置在左上角,但是我們也可以通過layout_gravity屬性,指定到其他的位置买窟。

1.3.1常用屬性:

android:foreground:*設置改幀布局容器的前景圖像

android:foregroundGravity:設置前景圖像顯示的位置

1.4AbsoluteLayout(絕對布局)---已被棄用

1.5TableLayout(表格布局)

方法圖

需要注意的點:

列數(shù)是從0開始的。

每一個<TableRow> </TableRow>即為一行

1.6布局技巧與優(yōu)化

1.6.1布局的優(yōu)化:

布局的結構要清晰

嵌套的層數(shù)需要控制(小于10層)

減少層數(shù)(使用相對布局)

1.6.2布局的技巧

<include/>重用布局文件

<merge/>減少試圖層數(shù)

<ViewStub/>需要時才加載

不要嵌套多個使用layout_weight屬性的LinearLayout

Android lint---優(yōu)化代碼薯定、查找沒用到的資源蔑祟、查找錯誤

HierarchyViewer---優(yōu)化布局設計


2無比重要的ListView


ListView是一種以列表形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應顯示的控件沉唠。一個listView通常有兩個職責:一是將數(shù)據(jù)填充到布局疆虚,二是處理用戶的選擇點擊操作等

構建ListView的元素:

- ListView中每一列的view满葛。

- 填入View的數(shù)據(jù)径簿,如字符串、圖片或組件嘀韧。

- 連接數(shù)據(jù)與ListView的適配器篇亭。

2.1Adapter

適配器是一個連接數(shù)據(jù)和AdapterView(ListView就是一個典型的AdapterView,后面還會學習其他的)的橋梁锄贷,通過它能有效地實現(xiàn)數(shù)據(jù)與AdapterView的分離設置译蒂,使AdapterView與數(shù)據(jù)的綁定更加簡便,修改更加方便.

適配器包括:ArrayAdapter谊却、SimpleAdapter柔昼、SimpleCursorAdapter、BaseAdapter等炎辨。(各種Adapter只不過是轉換的方式和能力不一樣而已)

2.1.1BaseAdapter


BaseAdapter的方法圖

使用BaseAdapter必須寫一個類繼承它捕透,同時BaseAdapter是一個抽象類,繼承它必須實現(xiàn)它的方法碴萧。BaseAdapter的靈活性就在于它要重寫很多方法乙嘀,看一下有哪些方法,如上圖所示為繼承自BaseAdapter的SpeechListAdapter所實現(xiàn)的方法破喻,其中最重要的即為getView()方法虎谢。

當系統(tǒng)開始繪制ListView的時候,首先調(diào)用getCount()方法曹质。得到它的返回值婴噩,即ListView的長度。然后系統(tǒng)調(diào)用getView()方法咆繁,根據(jù)這個長度逐一繪制ListView的每一行讳推。也就是說,如果讓getCount()返回1玩般,那么只顯示一行银觅。而getItem()和getItemId()則在需要處理和取得Adapter中的數(shù)據(jù)時調(diào)用。

public class PhoneBookAdapter extends BaseAdapter {?

?? private Context mContext;? ??

private LayoutInflater mLayoutInflater;??

? private ListmUserInfos= new ArrayList<>();

? ? public PhoneBookAdapter(Context context, List userInfos) {

mContext = context;

mUserInfos = userInfos;

mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

@Override

public int getCount() {

// 有多少條數(shù)據(jù)

return mUserInfos.size();

}

@Override

public Object getItem(int position) {

// 返回某一條數(shù)據(jù)對象

return mUserInfos.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// 返回一個視圖

if(converView==null){

convertView = mLayoutInflater.inflate(R.layout.item_phone_book_friend, null);

// 獲取控件

TextView nameTextView = (TextView) convertView.findViewById(R.id.name_text_view);

TextView? ageTextView = (TextView) convertView.findViewById(R.id.age_text_view);

ImageView avatarImageView = (ImageView) convertView.findViewById(R.id.avatar_image_view);

// 和數(shù)據(jù)之間進行綁定

nameTextView.setText(mUserInfos.get(position).getUserName());

ageTextView.setText(String.valueOf(mUserInfos.get(position).getAge()));

avatarImageView.setImageResource(R.drawable.ic_launcher);

return convertView;

}

在該構造器中通過使用判斷convertView是否為空來對性能進行優(yōu)化坏为。

2.2在JAVA文件中調(diào)用Adapter

public class ListViewDemoActivity extends Activity {

private ListView mPhoneBookListView;

private ListmUserInfos;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_listview_demo);

mPhoneBookListView = (ListView) findViewById(R.id.list_view);

mUserInfos = new ArrayList<>();

mUserInfos.add(new UserInfo("劉小明", 21));

mUserInfos.add(new UserInfo("張大偉", 22));

PhoneBookAdapter phoneBookAdapter = new PhoneBookAdapter(ListViewDemoActivity.this,mUserInfos);

mPhoneBookListView.setAdapter(phoneBookAdapter);

}

}



2.3ListView的點擊事件

調(diào)用setOnItemClickListener()方法來為ListView注冊一個監(jiān)聽器究驴,當ListView中的任何一個子項被點擊時就會回調(diào)onItemClick()方法镊绪。


3GridView和ScrollView


3.1GridView與ListView的相似與區(qū)別

相似之處:

GridView extends AbsListView

LIstView extends AbsListView

adapter、數(shù)據(jù)洒忧、點擊事件蝴韭、刷新都一樣

不同之處:

樣式(GridView為宮格式)

3.2GridView應用的地方

微信表情選擇、相冊選擇熙侍、頭像

3.3ScrollView的應用

不是列表的內(nèi)容區(qū)的滾動(

只支持一種方向上的滾動----默認為垂直)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榄鉴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蛉抓,更是在濱河造成了極大的恐慌庆尘,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巷送,死亡現(xiàn)場離奇詭異驶忌,居然都是意外死亡,警方通過查閱死者的電腦和手機笑跛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門付魔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人飞蹂,你說我怎么就攤上這事几苍。” “怎么了晤柄?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵擦剑,是天一觀的道長妖胀。 經(jīng)常有香客問我芥颈,道長,這世上最難降的妖魔是什么赚抡? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任爬坑,我火速辦了婚禮,結果婚禮上涂臣,老公的妹妹穿的比我還像新娘盾计。我一直安慰自己,他們只是感情好赁遗,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布署辉。 她就那樣靜靜地躺著,像睡著了一般岩四。 火紅的嫁衣襯著肌膚如雪哭尝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天剖煌,我揣著相機與錄音材鹦,去河邊找鬼逝淹。 笑死,一個胖子當著我的面吹牛桶唐,可吹牛的內(nèi)容都是我干的栅葡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼尤泽,長吁一口氣:“原來是場噩夢啊……” “哼欣簇!你這毒婦竟也來了?” 一聲冷哼從身側響起坯约,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤醉蚁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鬼店,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體网棍,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年妇智,在試婚紗的時候發(fā)現(xiàn)自己被綠了滥玷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡巍棱,死狀恐怖惑畴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情航徙,我是刑警寧澤如贷,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站到踏,受9級特大地震影響杠袱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窝稿,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一楣富、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伴榔,春花似錦纹蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至援奢,卻和暖如春兼犯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工免都, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锉罐,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓绕娘,卻偏偏與公主長得像脓规,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子险领,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容