1、android Tab的實現方式總結java
提及Tab頁,基本每一個作移動端的都會須要。iOS中內置了一個,因此ioser用起來很方便。而android這一塊就比較亂。android
木器實現Tab效果的方式,主要有4種,下面分別來講一下他們的優缺點:ios
1.radioGroup-Fragmentgit
這種實現方式代碼量巨大,對全部的切換都須要本身來控制,邏輯複雜,效率低下。固然好處也不少,就是很是的靈活,很適合動態的作一些改變。radioGroup能夠保證tab標籤中只能有一個被選中,選中後就能夠用FragmentManager來切換fragment達到tab頁的切換效果。在切換時,咱們還能夠控制fragment的切換動畫,達到左右滑入/滑出,或者漸變出現/消失燈效果。架構
2.Tabhost/TabhostActivityapp
這種實現方式能夠說是android上最古老最正宗的,至今還能夠在不少地方見到它的身影。可是它有個重大的缺陷——不支持Fragment,因此在3.0之後被google打入冷宮。ide
Tabhost相對RadioGroup來講,優勢就是不須要寫控制邏輯,只須要把子View一個個add進來,它本身就能實現控制。可是它的侷限性很是之大,它只支持View而不支持Fragment,因此只能作控件切換,而不能作頁面切換。可是用它來作控件切換也只支持點擊切換,在動效上徹底不及viewFliper和ViewPages,因此還須要把它和viewFliper配合使用,十分麻煩,因此本文暫且不表。佈局
3.FragmentTabHost測試
繼承自TabHost,是google從3.0時代推薦使用的,放在v4包中,專門用來切換fragment的,也是本文的重點。動畫
4.我也忘了叫什麼名字了
這個東西我忘了叫什麼名字,是google從5.X時代推出的一種新的設計理念中(叫個M....什麼的)的用來切換頁面的玩意。在android官網看了一下這東東的效果,確實不錯,可是惋惜的是,貌似5.X如下版本不兼容。。。因此也先略過不表。
2、FragmentTabHost的結構剖析
首先看一下佈局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <FrameLayout android:id="@+id/contentLayout" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#F6F6F6" > <TabWidget android:layout_width="match_parent" android:layout_height="wrap_content"> </TabWidget> <FrameLayout android:id="@android:id/tabcontent" android:layout_height="0dp" android:layout_width="0dp" /> </android.support.v4.app.FragmentTabHost> </LinearLayout>
主要分爲兩大部分,一個是android.support.v4.app.FragmentTabHost控件及其內包含的一些子控件;除此以外就是一個咱們自定義的Frame佈局,隨便起個id叫contentLayout。
TabWidget:android.support.v4.app.FragmentTabHost中有個子控件——TabWidget,這個控件就是咱們用來盛放標籤按鈕的容器。
tabcontent:android.support.v4.app.FragmentTabHost中有另一個子控件——tabcontent,這個控件P用沒有,可是必需要擺在這裏,至於爲何,忘了,好像是google的一個版本兼容問題致使的。
contentLayout:這纔是真正的內容容器。
這兩大部分的相對位置決定了tab按鈕是在上面仍是在下面。若是想再上面顯示,就把android.support.v4.app.FragmentTabHost放在contentLayout的上面。
接下來是activity中的代碼部分,核心的就這幾句:
//獲取佈局文件中的FragmentTabHost對象 tabHost=(FragmentTabHost)super.findViewById(android.R.id.tabhost); //初始化,參數依次是:context,FragmentManager,內容容器的id tabHost.setup(this,super.getSupportFragmentManager(),R.id.contentLayout); //不顯示tab按鈕之間的分割線 tabHost.getTabWidget().setDividerDrawable(null); //設置監聽 tabHost.setOnTabChangedListener(this); //用名稱建立一個tab子頁,並設置按鈕的圖標 TabSpec tabSpec=tabHost.newTabSpec(tabs.name).setIndicator(drawable); //把子頁添加進FragmentTabHost控制器,參數依次是 子頁,fragment.class,傳給這個頁面的參數(Bundle類型,可爲空) tabHost.addTab(tabSpec,fragment1.class,null);
最後貼上Demo下載地址,請用AndroidStudio打開
JTPlistOnAndroid是一個能夠在android上快速解析.plist文件的助手,可將plist解析成一個HashMap,HashMap的架構與原plist文件中的架構相對應。採用了p...
issues: 沒有issue
0c6394b6c Merge branch 'master' of git.oschina.net:william198824/JTPlistOnAndroid
william 2016-07-13 12:387cf7017bf 尚不支持Data標籤,由於我還不懂這個標籤是什麼意思.另外Date標籤目前可用,但還未測試過.其餘測試都正常.
william 2016-07-13 12:37180022cf7 尚不支持Data標籤,由於我還不懂這個標籤是什麼意思.另外Date標籤目前可用,但還未測試過.其餘測試都正常.
william 2016-07-13 12:37