Android之TabHost 的选项卡布局

TabHost的实现有两种方式:
第一种继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。各个Tab中的内容在布局文件中定义就行了。

 第二种方式,不继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。

第一种方式:

1. 布局文件  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2009 Joe LaPenna -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/home_gradient"
    android:orientation="vertical" >
  
    <TabHost
        android:id="@android:id/tabhost"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
  
        <!-- A paddingTop of zero will remove the strip below the tabs. -->
  
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingBottom="60dip" />
  
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
<!--  android:background="#363636" -->
            <TabWidget
                android:background="@drawable/title_bg_night"
                 
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="60dip"
                android:layout_alignParentBottom="true"
                android:tabStripEnabled="false" />
        </RelativeLayout>
    </TabHost>
  
</LinearLayout>

 

 2. 继承 TabActivity

1
2
3
public class MainTabActivity extends TabActivity {
    private TabHost mTabHost;
    private LayoutInflater inflater;

 

 inflater = LayoutInflater.from(this);   从这个TabActivity获取LayoutInflater

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
@Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
  
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main_tab);
  
        inflater = LayoutInflater.from(this);
  
        mTabHost = (TabHost) findViewById(android.R.id.tabhost);
  
        mTabHost.addTab(getTabSpec("mydouban", MeActivity.class, "我的豆瓣",
                R.drawable.tab_main_nav_me));
  
        mTabHost.addTab(getTabSpec("newbook", NewBooksActivity.class, "新书",
                R.drawable.tab_main_nav_book));
        mTabHost.addTab(getTabSpec("mydouban", MeActivity.class, "书评",
                R.drawable.detail_comment_selected));
        mTabHost.addTab(getTabSpec("mydouban", SearchActivity.class, "搜索",
                R.drawable.tab_main_nav_search));
        mTabHost.addTab(getTabSpec("mydouban", AboutActivity.class, "关于",
                R.drawable.tab_main_nav_more));
  
    }
  
    private TabSpec getTabSpec(String tag, Class clazz, String name, int drawid) {
  
        TabSpec spec = mTabHost.newTabSpec(tag);
        // 指定显示内容
        Intent intent = new Intent(this, clazz);
        spec.setContent(intent);
        // 设置标签的样式
        spec.setIndicator(getIndicatorView(name, drawid));
        return spec;
    }
  
    // 获取view对象
    private View getIndicatorView(String name, int drawid) {
        View view = inflater.inflate(R.layout.tab_main_nav, null);
        ImageView ivicon = (ImageView) view.findViewById(R.id.ivIcon);
        TextView tvtitle = (TextView) view.findViewById(R.id.tvTitle);
        ivicon.setImageResource(drawid);
        tvtitle.setText(name);
        return view;
    }

3.每个选项卡的布局文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabMainNav"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/tab_main_nav_selector"
    android:gravity="center_horizontal"
    android:orientation="vertical" >
  
    <ImageView
        android:id="@+id/ivIcon"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:layout_marginBottom="1dip"
        android:layout_marginTop="5dip"
        android:scaleType="fitXY" />
  
    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dip"
        android:textAppearance="@style/TextViewStyleTabMainNav"
        android:textSize="14dip" />
  
</LinearLayout>

 

第二 种方式:

 

不继承TabActivity

     继承普通Activity,<TabWidget>标签id必须为tabs、<FrameLayout>标签id必须为tabcontent.这个方式在通过findViewById获得TabHost之后,必须要调用setup方法。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>  
  <!-- TabHost必须包含一个 TabWidget和一个FrameLayout-->   
  <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent" android:layout_height="wrap_content">  
        <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">  
            <!-- TabWidget的id属性必须为 @android:id/tabs-->              
            <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent"  
              android:layout_height="wrap_content" />  
            <!-- FrameLayout的id属性必须为 @android:id/tabcontent-->  
             <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent">  
                <TextView android:id="@+id/view1" android:layout_width="fill_parent" android:layout_height="fill_parent"/>  
                <TextView android:id="@+id/view2" android:layout_width="fill_parent" android:layout_height="fill_parent"/>  
                <TextView android:id="@+id/view3" android:layout_width="fill_parent" android:layout_height="fill_parent"/>  
             </FrameLayout>  
         </LinearLayout>  
    </TabHost>  
</LinearLayout>

// 如果没有继承TabActivity时,通过该种方法加载启动tabHost  
        tabHost.setup();  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class TabHostTest extends Activity {  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        // 获取TabHost对象  
        TabHost tabHost = (TabHost) findViewById(R.id.tabhost);  
        // 如果没有继承TabActivity时,通过该种方法加载启动tabHost  
        tabHost.setup();  
        tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一个标签",  
                getResources().getDrawable(R.drawable.icon)).setContent(  
                R.id.view1));  
    
        tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三个标签")  
                .setContent(R.id.view3));  
    
        tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二个标签")  
                .setContent(R.id.view2));  
    }  
}

 

 

 



来自为知笔记(Wiz)


posted on 2014-04-28 13:52  转折点人生  阅读(359)  评论(0编辑  收藏  举报