溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【筆記】與Android選項卡一周

發(fā)布時間:2020-07-30 21:32:11 來源:網絡 閱讀:376 作者:UFOguo 欄目:移動開發(fā)

果然,還是項目驅動的學習方式比較有趣呢。

這周的學習全部圍繞著選項卡,也就是tab。

用到了好多知識點,都不知道從哪里開始啦(≧o≦*)。


    選項卡的制作有很多方法。選項菜單可以用普通的TextView,也可以直接上button。我選擇的是TextView,可能更接近網頁的思路吧。

先列個清單出來:

  1. selector

  2. Fragment

  3. ViewPager

布局嘛,網上有一堆,就不提了。


1.selector

    選項卡的功能,就是按不同的按鈕就能切換到不同頁面。作為反饋,按鈕總得有點變化,比如換個顏色。實現(xiàn)思路很簡單,點擊之后換個圖標就好了嘛。嗯~o(* ̄▽ ̄*)o,然而在onClick上折騰半天之后,我打開了百度,很快發(fā)現(xiàn)了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導入的圖標,自動生成各種規(guī)格,免去了手動處理圖片大小的麻煩。和.9圖應該是一樣的效果吧(.9圖?我沒做,我不懂)。


    接著在主界面的TextView寫上這句話:

    android:drawableTop="@drawable/for_tab1"

    完工!

    改變item標簽內的屬性名(比如color),就可以改變其他效果。



2.Fragment

    接著就是內容匹配。每個選項卡對應一個內容,一個內容就是一個Fragment。

    android中一個頁面可以看作一個Activity,而Fragment只是”碎片“,生命周期不會長于所存在的Activity。查看配置文件AndroidManifest.xml可以發(fā)現(xiàn),F(xiàn)ragment是沒有注冊的。

     最簡單的Fragment,就是重寫onCreatView:

View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout., container, );
    view;

}

這時冒出了個inflater!你是誰?inflater說我只是個控制器,連接視圖和模型。啊~雖然沒有明白,但我暫時放過你,小心點inflater,我會盯著你的!

    


3.ViewPager

    鐺~鐺~鐺~

    ViewPager來了!快讓開!

    誒,F(xiàn)ragment好像沒講完???沒辦法呀,F(xiàn)ragment沒人(activity)權啊,只能靠主子(activity)接濟過活╮(╯3╰)╭。ViewPager就是從Activity派來的走狗,啊呸,使者!

   1 ViewPager可說是這個選項卡的核心。每個Fragment是選項卡顯示的內容,ViewPager像是內容的容器,同時擔任調度的工作。

    布局里的ViewPager看起來就是個普通的標簽,但是人家上頭有人!

    ViewPager需要一個FragmentAdapter才能工作。

    這是個超簡單的實現(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()中運行,就綁定好了這些Fragment。



2Listener人呢?給tab們綁定好事件就該你上場了

tabListener View.OnClickListener {
    = ;

    tabListener(index) {
        .= index;
    }

    onClick(View v) {
        .setCurrentItem();
        clearSelect();
        .get().setSelected();
    }
}

index是區(qū)分tab的編號;

clearSelect是將tab卡片選擇狀態(tài)重置(用setSelected(false));

tabList里裝的是作為tab按鈕的TextView;

綁定事件應該會,,,吧?

(i = ; i < .size(); i++) {
    .get(i).setOnClickListener(tabListener(i));
}

似乎很簡單,但是我不會告訴你,有一半時間花在了調空指針的BUG!


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI