zoukankan      html  css  js  c++  java
  • Android TabActivity实现菜单标签

    TabWidget类似于Android 中查看电话薄的界面,通过多个标签切换显示不同内容。要实现这一效果,首先要了解TabHost,它是一个用来存放多个Tab标签的容器。每一个Tab都可以对应自己的布局,比如,电话薄中的Tab布局就是一个List的线性布局了。 
    要使用TabHost,首先需要通过getTabHost方法来获取TabHost的对象,然后通过addTab方法来向TabHost中添加 Tab。当然每个Tab在切换时都会产生一个事件,要捕捉这个事件需要设置TabActivity的事件监听 setOnTabChangedListener。

    1、布局文件

    <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: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" />
    
        <FrameLayout
          android:id="@android:id/tabcontent"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" >
    
          <TextView
            android:id="@+id/textview1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Linux"
            android:textColor="#FF0000" />
    
          <TextView
            android:id="@+id/textview2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="MAC"
            android:textColor="#385E0F" />
    
          <TextView
            android:id="@+id/textview3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Windows"
            android:textColor="#1E90FF" />
        </FrameLayout>
      </LinearLayout>
    </TabHost>

    2、修改MainActivity,注意是继承自TabActivity

    public class MainActivity extends TabActivity {
    
        private TabHost tabHost;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tabHost = getTabHost();
    
            addTab();// 添加标签
            // 设置TabHost背景颜色
            tabHost.setBackgroundColor(Color.argb(150, 20, 80, 150));
            // 设置TabHost背景图片资源
            tabHost.setBackgroundResource(R.drawable.ic_launcher);
            // 设置当前显示哪一个标签 我的理解就是当你第一次启动程序默认显示那个标签 这里是指定的选项卡的ID从0开始
            tabHost.setCurrentTab(0);
            // 标签切换事件处理,setOnTabChangedListener 注意是标签切换事件不是点击事件,而是从一个标签切换到另外一个标签会触发的事件
            tabHost.setOnTabChangedListener(new OnTabChangeListener() {
                @Override
                public void onTabChanged(String tabId) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    Dialog dia;
                    builder.setTitle("提示");
                    builder.setMessage("当前选中了" + tabId + "标签");
                    builder.setPositiveButton("确定", new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.cancel();
                        }
                    });
                    dia = builder.create();
                    dia.show();
                }
            });
        }
    
        // 为TabHost添加标签 新建一个newTabSped(new TabSpec) 设置其标签和图标(setIndicator)、设置内容(setContent)
        // TabSpec是TabHost的内部类 TabHost对象的 newTabSpec()方法返回一个TabSpec对象
        // 源码里边是这么写的 public TabSpec newTabSpec(String tag)
        // { return new TabSpec(tag); }
        private void addTab() {
            tabHost.addTab(tabHost
                    .newTabSpec("tab1")
                    .setIndicator("TAB1",
                            getResources().getDrawable(R.drawable.ic_launcher))// setIndicator()此方法用来设置标签和图表
                    .setContent(R.id.textview1));
            // 指定内容为一个TextView --->public TabHost.TabSpec setContent(int viewId) 此方法需要一个 viewId 作为参数
            tabHost.addTab(tabHost
                    .newTabSpec("tab2")
                    .setIndicator("TAB2",
                            getResources().getDrawable(R.drawable.ic_launcher))
                    .setContent(R.id.textview2));
    
            tabHost.addTab(tabHost
                    .newTabSpec("tab3")
                    .setIndicator("TAB3",
                            getResources().getDrawable(R.drawable.ic_launcher))
                    .setContent(R.id.textview3));
        }
    }

    3、运行程序:如下!

    4、在设置每一个Tab的时候,还可以将一个Tab设置为一个Activity,只需要在setContent里面设置参数为new Intent(Context,Class)即可;

  • 相关阅读:
    uiwebview的基本使用
    当你在浏览器地址栏输入一个URL后回车,将会发生的事情?
    开车误闯红灯的补救方法 (以及由此引发的一些思考)
    Android源码剖析之Framework层基础版(窗口、linux、token、Binder)
    Android项目框架之图片加载框架的选择
    通过runtime替换系统类实现的代码(从github开源库fdstackview中摘录)
    awakeFromNib相关知识详解
    推送服务推荐
    由微博图床挂掉之后想到的
    Mac下如何配置环境变量
  • 原文地址:https://www.cnblogs.com/a284628487/p/3027251.html
Copyright © 2011-2022 走看看