TabActivity的浅薄理解

来源:互联网 发布:cc域名注册 编辑:程序博客网 时间:2024/05/04 08:19

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布局文件就不写了,这要看具体的需求。



原创粉丝点击