zoukankan      html  css  js  c++  java
  • Android中选项卡TabHost的基本使用

      今天来学习一下选项卡(TabHost)的使用,
      选项卡的使用很常见,比如说:我们在手机上面 已接来电,未接来电的分组,首先来看下实现出来的效果截图:

      我们要去实现TabHost,主要有两种方法:
      一
      1、各选项内容在布局文件中定义。
      2、主Activity类继承TabActivity;
      3、用getTabHost()方法获取TabHost
      二
      1、直接在布局文件中定义TabHost
      注意:TabWidget的id必须是@android:id/tabs,FrameLayout的id必须是   @android:id/tabcontent。
      接下来使用第一种的实现方法来去实现TabHost
      主Activity类:

    package com.jiangqq.tabhost;
     
    import android.app.TabActivity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
     
    public class TabHostActivity_Second extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.tabhost_second);
    // 得到TabHost
    TabHost tabHost = this.getTabHost();
     
    // 把自己的布局文件添加到TabHost 的FrameLayout中 【注意】很重要的一句代码
    LayoutInflater.from(this).inflate(R.layout.tabhost_second,
    tabHost.getTabContentView(), true);
    // 设置选项卡
    // 参数:是选项卡的标签
    TabSpec parentSpec = tabHost.newTabSpec("parent");
    parentSpec.setIndicator("基类",
    this.getResources().getDrawable(R.drawable.announcements256));
    parentSpec.setContent(R.id.tab_1);
     
    TabSpec subSpec = tabHost.newTabSpec("sub");
    subSpec.setIndicator("子类",
    this.getResources().getDrawable(R.drawable.content256));
    subSpec.setContent(R.id.tab_2);
     
    tabHost.addTab(parentSpec);
    tabHost.addTab(subSpec);
     
    }
    }
    

      TabHost的布局文件:

    package com.jiangqq.tabhost;
     
    import android.app.TabActivity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
     
    public class TabHostActivity_Second extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    // setContentView(R.layout.tabhost_second);
    // 得到TabHost
    TabHost tabHost = this.getTabHost();
     
    // 把自己的布局文件添加到TabHost 的FrameLayout中 【注意】很重要的一句代码
    LayoutInflater.from(this).inflate(R.layout.tabhost_second,
    tabHost.getTabContentView(), true);
    // 设置选项卡
    // 参数:是选项卡的标签
    TabSpec parentSpec = tabHost.newTabSpec("parent");
    parentSpec.setIndicator("基类",
    this.getResources().getDrawable(R.drawable.announcements256));
    parentSpec.setContent(R.id.tab_1);
     
    TabSpec subSpec = tabHost.newTabSpec("sub");
    subSpec.setIndicator("子类",
    this.getResources().getDrawable(R.drawable.content256));
    subSpec.setContent(R.id.tab_2);
     
    tabHost.addTab(parentSpec);
    tabHost.addTab(subSpec);
     
    }
    }
    

      然后使用第二种方法创建TabHost
      主Activity类:

    package com.jiangqq.tabhost;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
     
    /**
    * 本例是实现TabHost----->直接在XML文件中进行配置 【注意】在xml文件中
    * TahWidget和FrameLayout标签中的ID,必须要使用Android中默认的
    *
    * @author jiangqq
    *
    */
    public class TabHostActivity_First extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabhost_first);
    // 获取TabHost
    TabHost tabHost = (TabHost) findViewById(R.id.tabs);
    tabHost.setup();
    // 设置选项卡
    // 参数:是选项卡的标签
    TabSpec parentSpec = tabHost.newTabSpec("parent");
    parentSpec.setIndicator("基类",
    this.getResources().getDrawable(R.drawable.announcements256));
    parentSpec.setContent(R.id.tab_1);
     
    TabSpec subSpec = tabHost.newTabSpec("sub");
    subSpec.setIndicator("子类",
    this.getResources().getDrawable(R.drawable.content256));
    subSpec.setContent(R.id.tab_2);
     
    tabHost.addTab(parentSpec);
    tabHost.addTab(subSpec);
     
    }
    }
    

      布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
     
    <TabHost
    android:id="@+id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
     
    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
     
    <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
    </TabWidget>
     
    <FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
     
    <TextView
    android:id="@+id/tab_1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="jiangqq_TabHostDemo_First" >
    </TextView>
     
    <TextView
    android:id="@+id/tab_2"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="jiangqq_TabHostDemo_Second" >
    </TextView>
    </FrameLayout>
    </LinearLayout>
    </TabHost>
     
    </LinearLayout>
    

      大家可以比较一下两种方法的异同点,差异不是很大,创建起来也比较简单

  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/vus520/p/2561877.html
Copyright © 2011-2022 走看看