选项卡切换

简介: 引用:http://www.cnblogs.com/vir56k/archive/2011/07/04/2097570.html 相信使用过android手机的朋友都见过下面样子的选项卡,本文我们尝试做的演示。

引用:http://www.cnblogs.com/vir56k/archive/2011/07/04/2097570.html

相信使用过android手机的朋友都见过下面样子的选项卡,本文我们尝试做的演示。

 

这个选项卡页面,或者说是标签卡。分为两部分:

一个顶部的按钮(可点击的)的切换卡部分

一个主内容区(上图显示“第二个窗体”字体的)的主显示区。

我们想实现的效果是点击切换的选项卡卡部分,主显示区的内容随之改变。那么我们看下页面布局代码

 

< 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:orientation ="vertical"   
        android:layout_width
="fill_parent"   
        android:layout_height
="fill_parent" >   
     
        
< TabWidget  android:id ="@android:id/tabs"   
            android:layout_width
="fill_parent"   
           android:layout_height
="wrap_content"   
            android:paddingLeft
="1dip"   
            android:paddingRight
="1dip"   
            android:paddingTop
="4dip"   
        
/>   
          
       
< FrameLayout  android:id ="@android:id/tabcontent"   
           android:layout_width
="fill_parent"              
            android:layout_height
="1dip"   
           android:layout_weight
="1"   
       
/>        
    
</ LinearLayout >   
</ TabHost >  

 

如上面的代码所示:

整个窗体在一个TabHost元素下。TabHost素。他包含了一个子布局对象LinearLayout,这个布局对象的方向为“vertical”,注意这个垂直方向。它指示了如何排列这个布局对象的子对象,也就是它指示了TabWidget 和FrameLayout 这两个控件的排列。我们目前的排列是 TabWidget 在上,FrameLayout 在下。如果想实现“选项卡标签在底部的效果”,尝试下relativeLayout吧。

TabWidget 就是标签卡对象。就是用来切换的那个顶部标签卡。注意id必须为@android:id/tabs

FrameLayout 是内容区域,当标签卡变化时,这里的内容会随之变化。注意id必须为@android:id/tabcontent

 

布局构建完毕后。下一步要做的,就是如何为这个布局添加子选项卡了。

首先,让我们的activty继承自TabActivity 

 

public   class  ActTabActivityDemo1  extends  TabActivity 

 

在onCreate时获得tabHost对象,并添加选项卡

_tabHost  =  getTabHost();
AddTabPage1(); //执行添加子选项卡的方法

 

我们看下AddTabPage1()方法的具体实现。

        Intent internt1  =   new  Intent();
        internt1.setClass(
this ,Act1. class );
        
        TabSpec tabSpec 
=  _tabHost.newTabSpec( " act1 " );
        
// 指定选项卡的显示名称
        tabSpec.setIndicator( " 选项卡一 " );
        
// 指定跳转方向
        tabSpec.setContent(internt1);          
        _tabHost.addTab(tabSpec);

如上面的代码所示,我们构建了一个TabSpec 对象,并调用_tabHost.addTab(tabSpec);方法,将这个对象加入到选项卡集合中。

TabSpec 是一个 选项卡对象,或者说是 TabSpec 描述一个选项卡的。通过

 tabSpec.setIndicator 指定选项卡的显示名称。

 tabSpec.setContent(internt1);  指定跳转方向,在这里指定了当顶部的标签卡被指定时,执行的Intent 对象。我们常常使用Intent 来做窗体间的跳转。
  

完成了上述步骤后,就可以具体实现 具体的选项卡 里的布局(内容)了。

下面贴出完成的Activity代码

 

package  demo.TabActivityDemo1;

import  android.app.Activity;
import  android.app.TabActivity;
import  android.content.Intent;
import  android.os.Bundle;
import  android.widget.TabHost;
import  android.widget.TabHost.TabSpec;

public   class  ActTabActivityDemo1  extends  TabActivity  {
     
private  TabHost _tabHost;
    
    
/**  Called when the activity is first created.  */
    @Override
    
public   void  onCreate(Bundle savedInstanceState) {
        
super .onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        _tabHost 
=  getTabHost();
        
        AddTabPage1();
        
        AddTabPage2();
        
        AddTabPage1();
    }

    
private   void  AddTabPage1() {
        
//  TODO Auto-generated method stub
        
        Intent internt1 
=   new  Intent();
        internt1.setClass(
this ,Act1. class );
        
        TabSpec tabSpec 
=  _tabHost.newTabSpec( " act1 " );
        
// 指定选项卡的显示名称
        tabSpec.setIndicator( " 选项卡一 " );
        
// 指定跳转方向
        tabSpec.setContent(internt1);          
        _tabHost.addTab(tabSpec);
    }
    
    
private   void  AddTabPage2() {
        
//  TODO Auto-generated method stub
        
        Intent internt1 
=   new  Intent();
        internt1.setClass(
this ,Act2. class );
        
        TabSpec tabSpec 
=  _tabHost.newTabSpec( " act2 " );
        tabSpec.setIndicator(
" 选项卡二 " );
        tabSpec.setContent(internt1);          
        _tabHost.addTab(tabSpec);
    }
}
相关文章
|
13天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
12天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
393 135
|
12天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
496 132
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
2天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
206 0
|
12天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
498 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
6天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
235 136
|
23天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1582 87