(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. 调用TabActivity的getTabHost创建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雷同。