android Tab頁詳解

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打開

參考:地址

william/JTPlistOnAndroid

star 1 | fork 0

JTPlistOnAndroid是一個能夠在android上快速解析.plist文件的助手,可將plist解析成一個HashMap,HashMap的架構與原plist文件中的架構相對應。採用了p...

issues: 沒有issue

最近提交:

下載zip master分支 代碼最近更新:2016-07-13

相關文章
相關標籤/搜索