方法1.继承系统自带的TabActivity,在oncreate()函数中需要,获取系统的tabhost以
及tabwidget(getTabHost();,getTabWidget()),其中有两个思路:
A:如果需要在布局文件中直接定义选项卡的一些属性,或者加入其它的控件,则布局文
件中主要由
需分别定义为:@android:id/tabhost、@android:id/tabcontent、@android:id/tabs,
否则会报错。 最后设置setContentView(R.layout.tab);
B:如果想在oncreate()函数中对选项卡的ui界面进行设置的话,则只需要在布局文件
中定义
不需要设置setContentView,而是利用映射的方法引入相关控件:
LayoutInflater li = LayoutInflater.from(this);
li.inflate(R.layout.main, tabHost.getTabContentView(), true);
方法2:不继承TabActivity,自定义所有控件,即在布局文件中包含
的A,除了tabhost需要自己定义。
此时在oncreate()函数中:设置 setContentView(R.layout.tab),然后 tabHost =
(TabHost) this.findViewById(R.id.TabHost01)找到控件。需要注意的是还有一个步骤
: tabHost.setup(),用来建立自定义的tabhost。
方法2使用过程中出现的问题:
A。tabhost可以用自定义的id,然后findviewbyid来找到他。那如果要设置tabwidget的
某些属性怎么办呢?这时候,布局文件中tabwidget的id必须设置为@android:id/tabs,
所以tabwidget控件如果要用findViewbyid来找到的话,只能用 findViewById
(android.R.id.tabs),属于系统的控件。
B。虽然这里不继承TabActivity,所以第一反应就继承普通的Activity,没错,当你的
tabHost.addTab的时候,添加的只是一个屏幕的布局的时候,这里确实是正确的。但是,
当你addTab的是一个ActivityGroup的时候,情况就不一样了(我就是这样)。此时会报
一个错误Did you forget to call 'public void setup(LocalActivityManager
activityGroup?
解决方法是:继承ActivityGroup,并且将tabHost.setup()这个函数改成: mTabhost.setup(this.getLocalActivityManager());
Tabhost选项卡的背景设置问题:
1.去下划线
mTabhost.setPadding(mTabhost.getPaddingLeft(), mTabhost.getPaddingTop(),
mTabhost.getPaddingRight(), mTabhost.getPaddingBottom() - 5);
2.设置透明
//遍历tabWidget for (int i = 0; i < tabWidget.getChildCount(); i++) { View tagview = tabWidget.getChildAt(i); tagview.setBackgroundDrawable(null); TextView tv = (TextView) tabWidget.getChildAt(i).findViewById (android.R.id.title); tv.setTextColor(getResources().getColor(R.color.black)); }