TabActivity的浅薄理解

TabActivity在android中实现多Activity切换,效果和之前的文章ActivityGroup+ScrollView效果类似。在SDK文档中TabActivity的类继承结构如下:

java.lang.Object 
   ↳ android.content.Context 
     ↳ android.content.ContextWrapper 
       ↳ android.view.ContextThemeWrapper 
         ↳ android.app.Activity 
           ↳ android.app.ActivityGroup 
             ↳ android.app.TabActivity 
文档在介绍这个类的时候还用了很多Demo来讲解,可以去看看。

好,这里主要介绍TabActivity+TabHost配置实现多个Activity切换的效果,根据官网的Demo和网上资料,我写了一个小小的例子来说明这个类的使用

首先建立一个类继承TabActivity

package dxd.tabactivity.test;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class TabActivityTestActivity extends TabActivity {
	private TabHost m_tabHost;  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        m_tabHost = getTabHost();  
        addOneTab();  
        addTwoTab();  
        addThreeTab();   
    }  
      
    public void addOneTab(){  
        Intent intent = new Intent();  
        intent.setClass(TabActivityTestActivity.this, ActivityA.class);  
        TabSpec spec = m_tabHost.newTabSpec("One");  
        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.tabspec1_layout, null);
        spec.setIndicator(view);
        spec.setContent(intent);          
        m_tabHost.addTab(spec);  
    }  
      
    public void addTwoTab(){  
        Intent intent = new Intent();  
        intent.setClass(TabActivityTestActivity.this, ActivityB.class);  
        TabSpec spec = m_tabHost.newTabSpec("Two");  
        spec.setIndicator(getString(R.string.two), getResources().getDrawable(R.drawable.icon));  
        spec.setContent(intent);          
        m_tabHost.addTab(spec);  
    }  
    public void addThreeTab(){  
        Intent intent = new Intent();  
        intent.setClass(TabActivityTestActivity.this, ActivityC.class);  
        TabSpec spec = m_tabHost.newTabSpec("Three");  
        spec.setIndicator(getString(R.string.three), null);  
        spec.setContent(intent);          
        m_tabHost.addTab(spec);  
    }  
}
由代码可以看出,是用TabHost下的一个子类TabSpec将这些按钮和Activity加入其中的,我加了3中风格的Tab进去,第一种是自己定义的布局文件,使用LayoutInflater将layout转换成View,第二种是加入了一个图片和文字,第三种只加入了文字。可以去看setIndicator这个方法,这里我罗列一下:

TabHost.TabSpec  setIndicator(CharSequence label)  // 只设置文字信息
TabHost.TabSpec  setIndicator(View view)  // 设置一个View 这就很灵活了
TabHost.TabSpec  setIndicator(CharSequence label, Drawable icon) // 设置文字和图片,但是这个图文重叠了。求解啊,该怎么改?


接下来就看看布局文件,布局文件在这里是很重要的,有三个id必须要写死,必须是它! 

即TabHost的id必须是android:id="@android:id/tabhost"  

TabWidget的id必须是android:id="@android:id/tabs"

定义一个FrameLayout的id必须是android:id="@android:id/tabcontent" 

见代码:

<?xml version="1.0" encoding="utf-8"?>  
<TabHost  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@android:id/tabhost"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <LinearLayout  
        android:orientation="vertical"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent">  
     
        <TabWidget android:id="@android:id/tabs"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:paddingLeft="1dip"  
            android:paddingRight="1dip"  
            android:paddingTop="4dip"  
        />  
          
        <FrameLayout android:id="@android:id/tabcontent"  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
        />       
    </LinearLayout>  
</TabHost>  

另外,自己定义的布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/tabspec"
    android:layout_width="fill_parent" 
    android:orientation="horizontal"
    android:background="#fff000"
    android:layout_height="fill_parent">
    <Button 
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:textSize="28sp" 
    	android:text="是的"
    />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="28sp" 
        android:text="@string/one" 
    />
</LinearLayo


好,主要的代码就这些,其他几个Activity和对应的layout布局文件就不写了,这要看具体的需求。



你可能感兴趣的:(android)