TabWidget/TabHost的兩種使用方法

銳湃發表於2015-11-30
Android TabWidget/TabHost有兩種使用方法: 

第一種:使用系統自帶寫好的TabHost(及繼承自TabActivity類)具體程式碼如下: 


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<LinearLayout android:id="@+id/tab1"
		android:layout_width="fill_parent" android:layout_height="fill_parent"
		androidrientation="vertical">
		<TextView android:id="@+id/TextView1"
			android:text="This is a tab1" android:layout_width="fill_parent"
			android:layout_height="wrap_content">
		</TextView>
	</LinearLayout>
	<LinearLayout android:id="@+id/tab2"
		android:layout_width="fill_parent" android:layout_height="fill_parent"
		androidrientation="vertical">
		<TextView android:id="@+id/TextView2"
			android:text="This is a tab2" android:layout_width="fill_parent"
			android:layout_height="wrap_content">
		</TextView>
	</LinearLayout>
	<LinearLayout android:id="@+id/tab3"
		android:layout_width="fill_parent" android:layout_height="fill_parent"
		androidrientation="vertical">
		<TextView android:id="@+id/TextView3"
			android:text="This is a tab3" android:layout_width="fill_parent"
			android:layout_height="wrap_content">
		</TextView>
	</LinearLayout>
</FrameLayout>

package com.Aina.Android;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TabActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost;

public class Test_TabWidget extends TabActivity {
	/** Called when the activity is first created. */
	private TabHost tabHost;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// setContentView(R.layout.main);
		tabHost = this.getTabHost();
		LayoutInflater li = LayoutInflater.from(this);
		li.inflate(R.layout.main, tabHost.getTabContentView(), true);
		tabHost.addTab(tabHost.newTabSpec("Tab_1").setContent(R.id.tab1)
				.setIndicator("TAB1",
						this.getResources().getDrawable(R.drawable.img1)));
		tabHost.addTab(tabHost.newTabSpec("Tab_2").setContent(R.id.tab2)
				.setIndicator("TAB2",
						this.getResources().getDrawable(R.drawable.img2)));
		tabHost.addTab(tabHost.newTabSpec("Tab_3").setContent(R.id.tab3)
				.setIndicator("TAB3",
						this.getResources().getDrawable(R.drawable.img3)));
		tabHost.setCurrentTab(1);
//		tabHost.setBackgroundColor(Color.GRAY);
		tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

			public void onTabChanged(String tabId) {
				Dialog dialog = new AlertDialog.Builder(Test_TabWidget.this)
						.setTitle("提示").setMessage(
								"選中了" + tabId + "選項卡").setIcon(R.drawable.icon).setPositiveButton("確定", new DialogInterface.OnClickListener(){

									public void onClick(DialogInterface dialog,
											int which) {
										// TODO Auto-generated method stub
										
									}
									
								}).create();
				dialog.show();

			}

		});
	}
}
第二種:就是定義我們自己的tabHost:不用繼承TabActivity,具體程式碼如下: 

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/TabHost01" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<LinearLayout android:layout_width="fill_parent"
		android:orientation="vertical" android:layout_height="fill_parent">
		<TabWidget android:id="@android:id/tabs"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content" />
		<FrameLayout android:id="@android:id/tabcontent"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent">
			<LinearLayout android:id="@+id/LinearLayout1"
				android:layout_width="fill_parent"
				android:layout_height="wrap_content">
				<TextView android:text="one"
					android:id="@+id/TextView01" android:layout_width="wrap_content"
					android:layout_height="wrap_content">
				</TextView>
			</LinearLayout>
			<LinearLayout android:id="@+id/LinearLayout2"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content">
				<TextView android:text="two"
					android:id="@+id/TextView02" android:layout_width="fill_parent"
					android:layout_height="wrap_content">
				</TextView>
			</LinearLayout>
			<LinearLayout android:id="@+id/LinearLayout3"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content">
				<TextView android:text="three"
					android:id="@+id/TextView03" android:layout_width="fill_parent"
					android:layout_height="wrap_content">
				</TextView>
			</LinearLayout>
		</FrameLayout>
	</LinearLayout>
</TabHost>

package com.Aina.Android;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.TabHost;

public class Test_TabHost extends Activity {
	/** Called when the activity is first created. */
	private TabHost tabHost;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		try{
			tabHost = (TabHost) this.findViewById(R.id.TabHost01);
			tabHost.setup();
			
			tabHost.addTab(tabHost.newTabSpec("tab_1")
					.setContent(R.id.LinearLayout1)
					.setIndicator("TAB1",this.getResources().getDrawable(R.drawable.img1)));
			tabHost.addTab(tabHost.newTabSpec("tab_2")
					.setContent(R.id.LinearLayout2).setIndicator("TAB2",
							this.getResources().getDrawable(R.drawable.img2)));
			tabHost.addTab(tabHost.newTabSpec("tab_3")
					.setContent(R.id.LinearLayout3).setIndicator("TAB3",
							this.getResources().getDrawable(R.drawable.img3)));
			tabHost.setCurrentTab(1);
		}catch(Exception ex){
			ex.printStackTrace();
			Log.d("EXCEPTION", ex.getMessage());
		}

	}
}


注意:第二種方法時佈局檔案中的TabWidget的id必須定義為:android:id="@android:id/tabs",FrameLayout的id必須定義為:android:id="@android:id/tabcontent" 其它控制元件沒有限制,否則報錯。 

【Android進階】巢狀TabHost (TabHost中放TabHost,類似二級目錄、二級樹) 
http://blog.csdn.net/feng88724/archive/2011/02/23/6203358.aspx


轉自:http://gundumw100.iteye.com/blog/853967

相關文章