果然,還是項(xiàng)目驅(qū)動(dòng)的學(xué)習(xí)方式比較有趣呢。
成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè),成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)公司已向超過(guò)千家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
這周的學(xué)習(xí)全部圍繞著選項(xiàng)卡,也就是tab。
用到了好多知識(shí)點(diǎn),都不知道從哪里開(kāi)始啦(≧o≦*)。
選項(xiàng)卡的制作有很多方法。選項(xiàng)菜單可以用普通的TextView,也可以直接上button。我選擇的是TextView,可能更接近網(wǎng)頁(yè)的思路吧。
先列個(gè)清單出來(lái):
selector
Fragment
ViewPager
布局嘛,網(wǎng)上有一堆,就不提了。
1.selector
選項(xiàng)卡的功能,就是按不同的按鈕就能切換到不同頁(yè)面。作為反饋,按鈕總得有點(diǎn)變化,比如換個(gè)顏色。實(shí)現(xiàn)思路很簡(jiǎn)單,點(diǎn)擊之后換個(gè)圖標(biāo)就好了嘛。嗯~o(* ̄▽ ̄*)o,然而在onClick上折騰半天之后,我打開(kāi)了百度,很快發(fā)現(xiàn)了selector這個(gè)標(biāo)簽。
Σヽ(Д ; )居然還有這種操作!
selector用起來(lái)很簡(jiǎn)單,寫在drawable目錄下:
for_tab1.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_news_act" android:state_selected="true" />
<item android:drawable="@drawable/ic_news" />
</selector>
ic_news和ic_news_act是通過(guò)new->Image Asset導(dǎo)入的圖標(biāo),自動(dòng)生成各種規(guī)格,免去了手動(dòng)處理圖片大小的麻煩。和.9圖應(yīng)該是一樣的效果吧(.9圖?我沒(méi)做,我不懂)。
接著在主界面的TextView寫上這句話:
android:drawableTop="@drawable/for_tab1"
完工!
改變item標(biāo)簽內(nèi)的屬性名(比如color),就可以改變其他效果。
2.Fragment
接著就是內(nèi)容匹配。每個(gè)選項(xiàng)卡對(duì)應(yīng)一個(gè)內(nèi)容,一個(gè)內(nèi)容就是一個(gè)Fragment。
android中一個(gè)頁(yè)面可以看作一個(gè)Activity,而Fragment只是”碎片“,生命周期不會(huì)長(zhǎng)于所存在的Activity。查看配置文件AndroidManifest.xml可以發(fā)現(xiàn),F(xiàn)ragment是沒(méi)有注冊(cè)的。
最簡(jiǎn)單的Fragment,就是重寫onCreatView:
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout., container, ); view; }
這時(shí)冒出了個(gè)inflater!你是誰(shuí)?inflater說(shuō)我只是個(gè)控制器,連接視圖和模型。啊~雖然沒(méi)有明白,但我暫時(shí)放過(guò)你,小心點(diǎn)inflater,我會(huì)盯著你的!
3.ViewPager
鐺~鐺~鐺~
ViewPager來(lái)了!快讓開(kāi)!
誒,F(xiàn)ragment好像沒(méi)講完?。繘](méi)辦法呀,F(xiàn)ragment沒(méi)人(activity)權(quán)啊,只能靠主子(activity)接濟(jì)過(guò)活╮(╯3╰)╭。ViewPager就是從Activity派來(lái)的走狗,啊呸,使者!
1) ViewPager可說(shuō)是這個(gè)選項(xiàng)卡的核心。每個(gè)Fragment是選項(xiàng)卡顯示的內(nèi)容,ViewPager像是內(nèi)容的容器,同時(shí)擔(dān)任調(diào)度的工作。
布局里的ViewPager看起來(lái)就是個(gè)普通的標(biāo)簽,但是人家上頭有人!
ViewPager需要一個(gè)FragmentAdapter才能工作。
這是個(gè)超簡(jiǎn)單的實(shí)現(xiàn):
tabFragmentAdapter FragmentPagerAdapter { ArrayList<Fragment> ; =; tabFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list){ (fm); .= list; } Fragment getItem(position) { .get(position); } getCount() { ; } }
入口在主界面的Java類中:
fa = (getSupportFragmentManager(), ); .setAdapter(fa);
fg是填入了所有Fragment的ArrayList。
getSupperFragmentManager()取到了主界面的FragmentManager。
vp是用id獲取的布局中的ViewPager。
在tab所在的主界面的Java類的onCreate()中運(yùn)行,就綁定好了這些Fragment。
2)Listener人呢?給tab們綁定好事件就該你上場(chǎng)了
tabListener View.OnClickListener { = ; tabListener(index) { .= index; } onClick(View v) { .setCurrentItem(); clearSelect(); .get().setSelected(); } }
index是區(qū)分tab的編號(hào);
clearSelect是將tab卡片選擇狀態(tài)重置(用setSelected(false));
tabList里裝的是作為tab按鈕的TextView;
綁定事件應(yīng)該會(huì),,,吧?
(i = ; i < .size(); i++) { .get(i).setOnClickListener(tabListener(i)); }
似乎很簡(jiǎn)單,但是我不會(huì)告訴你,有一半時(shí)間花在了調(diào)空指針的BUG!
分享標(biāo)題:【筆記】與Android選項(xiàng)卡一周
當(dāng)前URL:http://muchs.cn/article32/ghjssc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、云服務(wù)器、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站制作、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)