您好,登錄后才能下訂單哦!
果然,還是項目驅動的學習方式比較有趣呢。
這周的學習全部圍繞著選項卡,也就是tab。
用到了好多知識點,都不知道從哪里開始啦(≧o≦*)。
選項卡的制作有很多方法。選項菜單可以用普通的TextView,也可以直接上button。我選擇的是TextView,可能更接近網頁的思路吧。
先列個清單出來:
selector
Fragment
ViewPager
布局嘛,網上有一堆,就不提了。
1.selector
選項卡的功能,就是按不同的按鈕就能切換到不同頁面。作為反饋,按鈕總得有點變化,比如換個顏色。實現思路很簡單,點擊之后換個圖標就好了嘛。嗯~o(* ̄▽ ̄*)o,然而在onClick上折騰半天之后,我打開了百度,很快發現了selector這個標簽。
Σヽ(Д ; )居然還有這種操作!
selector用起來很簡單,寫在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是通過new->Image Asset導入的圖標,自動生成各種規格,免去了手動處理圖片大小的麻煩。和.9圖應該是一樣的效果吧(.9圖?我沒做,我不懂)。
接著在主界面的TextView寫上這句話:
android:drawableTop="@drawable/for_tab1"
完工!
改變item標簽內的屬性名(比如color),就可以改變其他效果。
2.Fragment
接著就是內容匹配。每個選項卡對應一個內容,一個內容就是一個Fragment。
android中一個頁面可以看作一個Activity,而Fragment只是”碎片“,生命周期不會長于所存在的Activity。查看配置文件AndroidManifest.xml可以發現,Fragment是沒有注冊的。
最簡單的Fragment,就是重寫onCreatView:
View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout., container, ); view; }
這時冒出了個inflater!你是誰?inflater說我只是個控制器,連接視圖和模型。啊~雖然沒有明白,但我暫時放過你,小心點inflater,我會盯著你的!
3.ViewPager
鐺~鐺~鐺~
ViewPager來了!快讓開!
誒,Fragment好像沒講完啊?沒辦法呀,Fragment沒人(activity)權啊,只能靠主子(activity)接濟過活╮(╯3╰)╭。ViewPager就是從Activity派來的走狗,啊呸,使者!
1) ViewPager可說是這個選項卡的核心。每個Fragment是選項卡顯示的內容,ViewPager像是內容的容器,同時擔任調度的工作。
布局里的ViewPager看起來就是個普通的標簽,但是人家上頭有人!
ViewPager需要一個FragmentAdapter才能工作。
這是個超簡單的實現:
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()中運行,就綁定好了這些Fragment。
2)Listener人呢?給tab們綁定好事件就該你上場了
tabListener View.OnClickListener { = ; tabListener(index) { .= index; } onClick(View v) { .setCurrentItem(); clearSelect(); .get().setSelected(); } }
index是區分tab的編號;
clearSelect是將tab卡片選擇狀態重置(用setSelected(false));
tabList里裝的是作為tab按鈕的TextView;
綁定事件應該會,,,吧?
(i = ; i < .size(); i++) { .get(i).setOnClickListener(tabListener(i)); }
似乎很簡單,但是我不會告訴你,有一半時間花在了調空指針的BUG!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。