第四章 Android開(kāi)發(fā)組件2
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)公司推出梁園免費(fèi)做網(wǎng)站回饋大家。
列表類組件
(1)ListView組件:以垂直列表的形式列出需要顯示的列表項(xiàng)
相關(guān)屬性:
a. android:divider 用于為列表視圖設(shè)置分隔條,可以用顏色或者圖片資源
b. android:dividerHeight 設(shè)置分隔條的高度
c. android:entries 通過(guò)數(shù)組資源為L(zhǎng)istView指定列表項(xiàng)
d. android:footerDividersEnabled 設(shè)置是否在footerView之前繪制分隔條,默認(rèn)為true。
e. android:headerDividersEnabled 設(shè)置是否在headerView之后繪制分隔條,默認(rèn)為true。
(2)ListView使用步驟:
a. 拖入一個(gè)ListView控件,高度改為match_parent
b. 新建一個(gè)布局xml文件,設(shè)定每行顯示的樣式
c. 創(chuàng)建一個(gè)類MyAdapter繼承BaseAdapter
getView()方法:設(shè)置每行數(shù)據(jù)顯示及每行顯示樣式
getCount()方法:顯示的行數(shù),當(dāng)返回值為0時(shí),getView()方法不會(huì)被調(diào)用,顯示為空白
d. 創(chuàng)建適配器對(duì)象
MyAdapter adapter = new MyAdapter();
e. 為L(zhǎng)istView設(shè)置適配器
listView.setAdapter(adapter);
f. 添加headview和footview(必須在設(shè)置適配器之前)
View headview = getLayoutInflater.inflate(R.layout.head,null);
View footview = getLayoutInflater.inflate(R.layout.foot,null);
listView.addHeadView(headview);
listView.addFootView(footview);
(3)ListView的優(yōu)化
上下滑動(dòng)會(huì)不斷觸發(fā)getview()方法
解決方法:復(fù)用行布局,減少控件查找
//創(chuàng)建一個(gè)類,聲明幾個(gè)變量(變量類型和數(shù)量與布局xml文件中包含的控件一致)
class ViewHolder{
View view1;
View view2;
......
}
//聲明成員變量
View inflate;
ViewHolder holder;
//優(yōu)化
if(convertView==null){
//創(chuàng)建一個(gè)ViewHolder對(duì)象
//得到布局轉(zhuǎn)換器對(duì)象
LayoutInflater inflater = getLayoutInflate();
//將布局xml文件轉(zhuǎn)換為布局對(duì)象
inflate = inflater.inflate(R.layout.listItem,null);
//查找控件
holder.view1 = inflate.findViewById(R.id.view1);
holder.view2 = inflate.findViewById(R.id.view2);
//設(shè)置一個(gè)標(biāo)簽
infalte.setTag(holder);
}else{
//替換、復(fù)用行布局
inflate=convertView;
holder = (ViewHolder)inflate.getTag();
}
//依據(jù)控件類型設(shè)置控件內(nèi)容
......
(3)數(shù)據(jù)更新
數(shù)據(jù)發(fā)生變化時(shí),由適配器通知listview更新數(shù)據(jù)
adapter.notifyDataSetChanged();
(4)ListView的點(diǎn)擊事件
a. 設(shè)置點(diǎn)擊監(jiān)聽(tīng)
listview.setOnItemClickListener(new OnItemClickListener){
@Override
public void onItemClick(AdapterView> parent,View view,int position,long id){
......
}
}
備注:當(dāng)行布局中存在搶占焦點(diǎn)的控件時(shí)(如Button),ListView的點(diǎn)擊會(huì)失效
解決方式:
在行布局中搶占焦點(diǎn)的控件上設(shè)置屬性:android:focusable = "false"
在行布局中設(shè)置讓所有能搶占焦點(diǎn)的控件都不搶占焦點(diǎn)
android:descendantFocusability = "blocksDescendants"
b. 設(shè)置長(zhǎng)按點(diǎn)擊監(jiān)聽(tīng)
listview.setOnItemLongClickListener(new OnItemLongClickListener){
@Override
public void OnItemLongClick(AdapterView> parent,View view,int position,long id){
......
}
}
Spinner組件:列表選擇框相當(dāng)于網(wǎng)頁(yè)中的常見(jiàn)的下拉列表框
getSelectedItem():獲取列表選擇框的選中值
OnItemSelectedListener:設(shè)置列表項(xiàng)的選中事件監(jiān)聽(tīng)。
setDropDownViewResource():為適配器設(shè)置列表框下拉時(shí)的選項(xiàng)樣式
Gallery組件:畫廊視圖,可按水平方向顯示內(nèi)容,并可用手指直接拖動(dòng)圖片移動(dòng),一般用來(lái)瀏覽 圖片。通常用BaseAAdapter適配器為Grallery組件提供要顯示的圖片。
ImageSwitcher組件:圖片切換器,用于實(shí)現(xiàn)類似于Windows下“Windows照片查看器”中的“上一 張”、“下一張”的功能。使用ImageSwitcher必須實(shí)現(xiàn) ViewSwitcher.ViewFactory接口,通過(guò)makeView()方法創(chuàng)建用于顯示圖片的 ImageView對(duì)象。例如:
p_w_picpathSwitcher.setInAnimation(xxx);//設(shè)置淡入動(dòng)畫
p_w_picpathSwitcher.setOutAnimation(xxx);//設(shè)置淡出動(dòng)畫
p_w_picpathSwitcher.setFactory(new ViewFactoty(){
@Override
public View makeView(){
ImageView p_w_picpathView = new ImageView(MainActivity.this);
return p_w_picpathView;
}
});
p_w_picpathSwitcher.setImageResource(xxx); //設(shè)置顯示的圖片