TabWidget切换片

本文详细介绍了在Android应用中实现Tab导航的四种方法,包括直接使用TabActivity、在XML布局中定义TabHost、通过TabContentFactory接口创建内容及模仿Tab效果的RadioButton方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(written in 2012-07-18 23:01:36


需要用到TabHost对象

常用API

TabHost getTabHost()

该方法TabActivity类方法创建TabHost对象

addTab()

添加一个选项卡

tabHost.newTabSpec(String tag)

为选项卡指定一个tag

setIndicator(String title)

设置选项卡的标题

setContent(int resId)

设置选项卡的现实内容,参数索引。

四种创建方式

·         方式一

1.  创建FrameLayout布局,main.xml

<FrameLayout
xmln:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> 
<TextView
android:id="@+id/tvTab1"
android:text="tab1 content"
android:textSize="30sp"
android:layout_width="wrap_content"
adnroid:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvTab2"
android:text="tab2 content"
android:textSize="30sp"
android:layout_width="wrap_content"
adnroid:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvTab3"
android:text="tab3 content"
android:textSize="30sp"
android:layout_width="wrap_content"
adnroid:layout_height="wrap_content"
/>
</FrameLayout>


2.  创建继承自TabActivity的类

public class MainAct extends TabAcitivty,去掉onCreate()中的setContentView()

3.  调用TabActivitygetTabHost创建TabHost对象

TabHost tabHost = getTabHost();

4.  调用LayoutInflater.from(context).inflate将指定布局作为当前所选卡的布局。

LayoutInflater.from(this).inflate(R.layout.main,tabHost.getTabContentView().true);


5.  调用TabHost对象的addTab()newTabSpec()创建选项卡:

tabHost.addTab(tabHost.newTabSpec("tag_tag1")
.setIndicator("tab_title")
.setContent(R.id.tvTab1));


·         方式二

main.xml

<TabHost
xmln:android:="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> 
<LinearLayout
android:id="@+id/llBeijing"
android:layout_width="match_parent"
android:layout_heigt="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
> 
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/beijing"
/>
<TextView
android:id="@+id/tvName"
android:textSize="30sp"
android:text="北京"
android:gravity="center_horizontal"
android:layout_width="170dp"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/llTianjin"
android:layout_width="match_parent"
android:layout_heigt="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
> 
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/tianjing"
/>
<TextView
android:id="@+id/tvName"
android:textSize="30sp"
android:text="天津"
android:gravity="center_horizontal"
android:layout_width="170dp"
android:layout_height="wrap_content"
/>
</LinearLayout>
 
</TabHost>


·         方式三

1.  创建一个布局文件beijing.xml

<LinearLayout
xmlns:android="http://schemas.andorid.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
> 
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/beijing"
/>
<TextView
android:id="@+id/tvName"
android:textSize="30sp"
android:text="北京"
android:gravity="center_horizontal"
android:layout_width="170dp"
android:layout_height="wrap_content"
/>
</LinearLayout>


2.  创建BeijingAct.java

public class BeijingAct extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.beijing);
}
}


3.  MainAct.java

public class MainAct extends TabActivity{
public void onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tag1")
.setIndicator("北京")
.setContent(new Intent(this,BeijingAct.class)));
}


·         方式四

1.  继承TabActivity,实现TabContentFactory接口

public  class MainAct extends TabActivity implements TabContentFactory


2.  在创建选项卡代码中,将LayoutInflater.from().inflate方法去掉。

TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab_tag1")
.setIndicator("北京")
.setContent(this);
TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("tab_tag2")
.setIndicator("天津")
.setContent(this);


3.  实现TabContentFactory接口中定义的方法createTabContent()

public View createTabContent(String tag){
View layout = null;
if(tag.equals("tab_tag1")){
latyout = LayoutInflater.from(this).inflate(R.layout.beijing,null);
}else if(tag.equals("tab_tag2"){
layout = LayoutInflater.from(this).inflate(R.layout.tianjin,null);
}
return layout;
}


 

例:创建Tab

main.xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabhost"
adnroid:layout_width="fill_parent"
android:layout_height="fill_parent"
> 
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
andrfoid:orientation="vertical"
> 
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
/>
<TabWidget
android:id="@android:id/table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
/>
</LinearLayout>
</TabHost>


MainAct.java

public class MainAct extends Activity{
private TabHost host;
private void setupView(){
host = (TabHost)findViewById(R.id.tabhost);
host.setup();
 
host.addTab(host.newTabSpec("tab1")
.setIndicator("界面1")
.setContent(new TabContentFactory(){
public View createTabContent(String tag){
Log.i("info","界面1的tabcontentfactory.createTabContent()");
TextView tv = new TextView(MainAct.this);
tv.setText("界面1");
return tv;
}
}));
 
host.addTab(host.newTabSpec("tab2")
.setIndicator("界面2")
.setContent(new TabContentFactory(){
public View createTabContent(String tag){
Log.i("info","界面2的tabcontentfactory.createTabContent()");
Button btn = new Buton(MainAct.this);
btn.setText("按钮");
return btn;
}
}));
 
host.addTab(host.newTabSpec("tab3")
.setIndicator("界面3")
.setContent(new TabContentFactory(){
public View createTabContent(String tag){
Log.i("info","界面3的tabcontentfactory.createTabContent()");
CheckBox chk = new CheckBox(MainAct.this);
chk.setChecked(true);
chk.setText("复选框");
return chk;
}
}));
 
host.addTab(host.newTabSpec("tab4")
.setIndicator("界面4")
.setContent(new TabContentFactory(){
public View createTabContent(String tag){
Log.i("info","界面4的tabcontentfactory.createTabContent()");
RaidoButton rdo = new RadioButton(MainAct.this);
rdo.setText("单选按钮");
return rdo;
 }
}));
}
 
public void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.main);
setupView();
}
}
 


例:继承TabActivity创建四个Tab

public class MainAct extends TabActivity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
 
TabHost host = getTabHost();
 
host.addTab(host.newTabSpec("add").setIndicator("添加").setContent(new Intent(this,AddActivity.class)));
host.addTab(host.newTabSpec("update").setIndicator("修改").setContent(new Intent(this,UpdateActivity.class)));
host.addTab(host.newTabSpec("delete").setIndicator("删除").setContent(new Intent(this,DeleteActivity.class)));
host.addTab(host.newTabSpec("search").setIndicator("查询").setContent(new Intent(this,SearchActivity.class)));
}
}
 
public class AddActivity extends Activity {
private static final String TAG = "ActivityAdddddddddddddddd";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setTextSize(25);
tv.setText(TAG);
setContentView(tv);
}
}
 
public class UpdateActivity extends Activity {
private static final String TAG = "ActivityUpdateeeeeeeeeeeeeee";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setTextSize(25);
tv.setText(TAG);
setContentView(tv);
}
}
 
public class DeleteActivity extends Activity {
private static final String TAG = "ActivityDeleteeeeeeeeeeeeeeeee";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setTextSize(25);
tv.setText(TAG);
setContentView(tv);
}
}
 
public class SearchActivity extends Activity {
private static final String TAG = "ActivitySearchhhhhhhhhhhh";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setTextSize(25);
tv.setText(TAG);
setContentView(tv);
}
}
 


例:radiobutton模仿Tab切换,Tab成按钮形状,在屏幕底部

drawable\rdo_bg_normal.xml

<?xml version="1.0" enconding="utf-8"?>
<shape
xmln:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#FFF"
/>
<gradient
android:startColor="#90F30C64"
android:endColor="#9046C3F3"
android:angle="180"
/>
<corners android:radius="5dp"/>
</shape>


drawable\rdo_bg_pressed.xml

<?xml version="1.0" enconding="utf-8"?>
<shape
xmln:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#FFF"
/>
<gradient
android:startColor="#90CC0FF0"
android:endColor="#9000F0C6"
android:angle="90"
/>
<corners android:radius="5dp"/>
</shape>


drawable\rdo_bg_checked.xml

<?xml version="1.0" enconding="utf-8"?>
<shape
xmln:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#FFF"
/>
<gradient
android:startColor="#90F3F3Fe"
android:endColor="#900Fcc0F"
android:angle="180"
/>
<corners android:radius="5dp"/>
</shape>


 

values\styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="rdo_bottom_style">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height>fill_parent</item>
<item name="android:layout_weight">1.0</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:button">@null</item>
<item name="android:background">@drawable/rdo_bg</item>
</style>
</resources>


 

main.xml

<FrameLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:id="@+id/flContainer"
/>
<RaidoGroup
android:id="@+id/rg"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizonal"
android:gravity="center_horaizontal"
android:checkedButton="@+id/rdoAdd"
android:layout_marginTop="2dp"
> 
<RadioButton
style="@style/rdo_bottom_style"
android:id="@id/rdoAdd"
android:text="添加"
adnroid:drawalbeTop="@android:drawable/ic_menu_add"
/>
<RadioButton
style="@style/rdo_bottom_style"
android:id="@id/rdoEdit"
android:text="修改"
adnroid:drawalbeTop="@android:drawable/ic_menu_edit"
/>
<RadioButton
style="@style/rdo_bottom_style"
android:id="@id/rdoDelete"
android:text="删除"
adnroid:drawalbeTop="@android:drawable/ic_menu_delete"
/>
<RadioButton
style="@style/rdo_bottom_style"
android:id="@id/rdoSearch"
android:text="查询"
adnroid:drawalbeTop="@android:drawable/ic_menu_search"
/>
<RadioButton
style="@style/rdo_bottom_style"
android:id="@id/rdoExit"
android:text="退出"
adnroid:drawalbeTop="@android:drawable/ic_menu_close_clear_cancel"
/>
</RaidoGroup>


MainAct.java

public class MainAct extends ActivityGroup{
private RadioGroup rg;
private FrameLayout flContainer;
 
private void setupView(){
rg = (RaidoGoup)findViewById(R.id.rg);
flContainer = (FramLayout)findViewById(R.id.flContainer);
flContainer.addView(getLocalActivityManager().startActivity("add",new Intent(this,AddActivity.class)).getDecorView());
}
 
private void addListener(){
rg.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup group,int checkedId){
LocalActivityManager manger = getLocalActivityManager();
Intent inent = null;
Window window = null;
flContainer.removeAllView();
switch(checkedId){
case R.id.rdoAdd:
intent = new Intent(MainAct.this,AddActivity.class);
window = manager.startActivity("add",intent);
break;
case R.id.rdoDelete:
intent = new Intent(MainAct.this,DeleteActivity.class);
window = manager.startActivity("delete",intent);
break;
case R.id.rdoUpdate:
intent = new Intent(MainAct.this,UpdateActivity.class);
window = manager.startActivity("update",intent);
break;
case R.id.rdoSearch:
intent = new Intent(MainAct.this,SearchActivity.class);
window = manager.startActivity("search",intent);
break;
case R.id.rdoExit:
finish();
return;
}
flContainer.addView(window.getDecorView());
}
});
}
 
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupView();
addListener();
}
}


AddActivity.java

public class AddActivity extends Activity{
private static final String TAG = "ActivityAdddddddddddddd";
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(TAG);
setContentView(tv);
}
}


[说明]DeleteActivity.java,SearchActivity.java,UpdateActivity.java雷同。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值