Android 中Tabhost选项卡的两种实现方法

方法1.继承系统自带的TabActivity,在oncreate()函数中需要,获取系统的tabhost以
及tabwidget(getTabHost();,getTabWidget()),其中有两个思路:
A:如果需要在布局文件中直接定义选项卡的一些属性,或者加入其它的控件,则布局文
件中主要由三部分构成。需要注意的是:三者的id
需分别定义为:@android:id/tabhost、@android:id/tabcontent、@android:id/tabs,
否则会报错。 最后设置setContentView(R.layout.tab);

B:如果想在oncreate()函数中对选项卡的ui界面进行设置的话,则只需要在布局文件
中定义即可,此时FrameLayout的id可以不定义。同时在oncreate函数中也
不需要设置setContentView,而是利用映射的方法引入相关控件:
LayoutInflater li = LayoutInflater.from(this);
li.inflate(R.layout.main, tabHost.getTabContentView(), true);


方法2:不继承TabActivity,自定义所有控件,即在布局文件中包含
三部分。当然三者的id也是有所限制的:同方法1中
的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)); 
  
    }

 

转载于:https://www.cnblogs.com/jimmyzhao/archive/2012/12/25/2832864.html

你可能感兴趣的:(Android 中Tabhost选项卡的两种实现方法)