Android的Tab与TabHost讲解

article/2025/9/9 21:48:06

  在Android应用中,经常会用到TabHost选项卡,可以方便地在不同页面间切换。之前看过网上的一些教程,但大多都是一个形式,看得迷迷糊糊,不能让人很好的理解和学习。所以,在此详细地列出了Tab与TabHost的使用方法,有不妥之处,尽请指正!

  首先,创建一个选项卡界面,需要使用一个TabHost和TabWidget。这个TabHost必须是根节点的布局,也就是main.xml。其中同时包含TabWidget显示标签和一个FrameLayout显示选项卡的内容。如图:

接下来就可以布局Tab选项卡面板了,常用的方法有三种:

(一)从一个layout布局创建各个tab页内容

public class Tabs1 extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TabHost tabHost = getTabHost();//获得一个TabHost。
        
        LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .setContent(R.id.view1));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab2")
                .setContent(R.id.view2));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab3")
                .setContent(R.id.view3));
    }
}

也就是说,选项卡里的内容是基于layout布局的,我们可以使用自己建立的布局文件来显示内容。当然,这种方法不常用,因为我们不会为了建立选项卡来单独显示内容,而不能做其他的事。

(二)动态创建一个view来做为tab页的内容

public class Tabs2 extends TabActivity implements TabHost.TabContentFactory {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TabHost tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1", getResources().getDrawable(R.drawable.star_big_on))
                .setContent(this));
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator("tab2")
                .setContent(this));
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("tab3")
                .setContent(this));
    }


    public View createTabContent(String tag) {
        final TextView tv = new TextView(this);
        tv.setText("Content for tab with tag " + tag);
        return tv;
    }
}

TabHost.TabContentFactory这个接口,是使一个选项卡的内容被选中后,使用这个我们自己创建选项卡内容的需求,即你不显示现有的视图或启动一个活动,而是我们自己动态地定义显示什么。这个接口有一个方法createTabContent(String tag)需要重写,它的作用就是用来返回选项卡被选中后显示的内容。

(三)传递一个intent以启动新的activity做为tab页的内容

这个才是我们常用的功能,可以很方便地在不同的Activity间切换,代码如下:

public class Tabs3 extends TabActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final TabHost tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("list")
                .setContent(new Intent(this, Activity_1.class)));
        tabHost.addTab(tabHost.newTabSpec("tab2")
                .setIndicator("photo list")
                .setContent(new Intent(this, Activity_2.class)));
       
        // This tab sets the intent flag so that it is recreated each time
        // the tab is clicked.
        tabHost.addTab(tabHost.newTabSpec("tab3")
                .setIndicator("destroy")
                .setContent(new Intent(this, Activity_3.class)
                        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));
    }
}

之后,我们就可以建立响应的Activity来做指定的事情了。

这里面有几个方法需要说明一下,newTabSpec(String tag)setIndicator("destroy"),setContent(new Intent(this, Activity_3.class)。
newTabSpec(String tag)用来获得一个Tab的空间来显示Tab,
首先来看一下TabHost.TabSpac这个类,它是TabHost的子类,有如下方法:

Public Methods
String getTag()
TabHost.TabSpec setContent(int viewId)
Specify the id of the view that should be used as the content of the tab.
TabHost.TabSpec setContent( Intent intent)
Specify an intent to use to launch an activity as the tab content.
TabHost.TabSpec setContent( TabHost.TabContentFactory contentFactory)
Specify a TabHost.TabContentFactory to use to create the content of the tab.
TabHost.TabSpec setIndicator( CharSequence label)
Specify a label as the tab indicator.
TabHost.TabSpec setIndicator( View view)
Specify a view as the tab indicator.
TabHost.TabSpec setIndicator( CharSequence label, Drawable icon)
Specify a label and icon as the tab indicator.

我们上面的程序正是使用了这里面的方法。好了,关于Tab与TabHost就讲解到这。欢迎感兴趣的朋友在此探讨。


 


http://chatgpt.dhexx.cn/article/0Ykmtg7D.shtml

相关文章

Android - TabHost 选项卡功能用法详解

一、实例 二.、TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabH…

【转】TabHost详解

请大家尊重作者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/17120325 前言:今天仔细研究了下TabHost,主要是为了实现微信底部导航栏的功能,最后也给出一个链接,这位老兄用TabH…

Android入门第十一篇之TabHost,TabWidget

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 这回要介绍的是Android的Tab控件,Tab控件可以达到分页的效果,让一个屏幕的内容尽量丰富,当然也会增加开发的复杂程度,在有必要的时候再使用。An…

android Tabhost部件

本文结合源代码和实例来说明TabHost的用法。 使用TabHost 可以在一个屏幕间进行不同版面的切换,例如android自带的拨号应用,截图: 查看tabhost的源代码,主要实例变量有: private TabWidget mTabWidget; …

TabHost的用法

http://blog.csdn.net/lastsweetop/article/details/5566200 本文结合源代码和实例来说明TabHost的用法。 使用TabHost 可以在一个屏幕间进行不同版面的切换,例如android自带的拨号应用,截图: 查看tabhost的源代码&#xff0…

ViewPager和Tabhost结合,可滑动的tabhost

有朋友反映资源下载下来有问题,我看了下,确实是,已更新下面文章中的代码和资源,现在可以好好的跑起来了,另外还改动了个小地方的逻辑,因为我在使用中出了点小错,需要的可以试下。另外&#xff0…

TabSpec和TabHost实例

TabSpec与TabHost TabHost相当于浏览器中浏览器分布的集合,而Tabspec则相当于浏览器中的每一个分页面。d在Android中,每一个TabSpec分布可以是一个组件,也可以是一个布局,然后将每一个分页装入TabHost中,TabHost即可将…

Android中的TabHost

介绍 有时,我们想在一个window中显示多个视图,这时就需要用到Tab容器。在Android里它叫TabHost。 使用TabHost有两种方式: 在相同的activity中使用TabHost导航多个视图使用TabHost导航多个Activity(通过intents) Tab应用的结构 TabHost的A…

Android修行手册 - TabHost回忆

往期文章分享 点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过…

Android TabHost的使用

1. 最简单的TabHost&#xff0c;Tab来自于layout下的元素 &#xff08;只从1个Layout中取数据&#xff09; &#xff08;1&#xff09;效果图 &#xff08;2&#xff09;代码 1&#xff09;tab_demo.xml <?xml version"1.0" encoding"utf-8"?&g…

TabHost详解

前言&#xff1a;今天仔细研究了下TabHost&#xff0c;主要是为了实现微信底部导航栏的功能&#xff0c;最后也给出一个链接&#xff0c;这位老兄用TabHost基本做出来了微信导航栏。 正文 TabHost的实现分为两种&#xff0c;一个是不继承TabActivity&#xff0c;一个是继承自…

Android选项卡TabHost功能和用法

1、选项卡TabHost介绍 TabHost可以方便地在窗口上放置多个标签页&#xff0c;每个标签页相当于获得了一个与外部容器大小相同的组件摆放区域 TabHost是一个简单的容器&#xff0c;提供如下两种方法来创建选项卡 newTabSpec(String tag):创建选项卡 addTab(TabHost.TabSpec tabS…

[Android] 选项卡组件TabHost

Tab选项卡实现多个分页之间的快速切换&#xff0c;每个分页可以显示不同的内容&#xff0c;在Android平台提供了TabHost组件实现Tab选项卡的功能&#xff0c;选项卡组件的主要功能是可以进行应用程序分类管理。 每个选项卡称为一个Tab&#xff0c;而包含这多个选项卡的容器称为…

交叉熵:计算交叉熵损失函数nn.CrossEntropyLoss()

首先要提出的问题是。。。什么是损失函数&#xff1f;干什么的&#xff08;功能&#xff09;&#xff1f;类型有哪些&#xff1f; 1.什么是损失函数&#xff1f; 损失函数&#xff08;loss function&#xff09;或 代价函数&#xff08;cost function&#xff09;是将随机事件或…

softmax函数与交叉熵损失函数

本文主要介绍了当前机器学习模型中广泛应用的交叉熵损失函数与softmax激励函数。 这个损失函数主要应用于多分类问题&#xff0c;用于衡量预测值与实际值之间的相似程度。 交叉熵损失函数定义如下: L C E ( y ^ , y ∗ ) − ∑ i 1 N c l a s s e s y i ∗ l o g ( y i ^ …

【交叉熵损失函数】关于交叉熵损失函数的一些理解

目录 0. 前言1.损失函数&#xff08;Loss Function&#xff09;1.1 损失项1.2 正则化项 2. 交叉熵损失函数2.1 softmax2.2 交叉熵 0. 前言 有段时间没写博客了&#xff0c;前段时间主要是在精读一些计算机视觉的论文&#xff08;比如yolov1&#xff09;&#xff0c;以及学cs23…

CrossEntropy交叉熵损失函数及softmax函数的理解

参考链接1 参考链接2 参考链接3 参考链接4 &#xff08;一&#xff09;什么是Sigmoid函数和softmax函数&#xff1f; 提到二分类问题容易想到逻辑回归算法&#xff0c;而逻辑回归算法最关键的步骤就是将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间&#xff…

【基础篇】交叉熵损失函数(Cross Entropy Loss)

文章目录 1. 理论知识2. 代码 1. 理论知识 我们需要关注那些按常理来说不太可能发生的事情。『信息量』就是用来度量事件的不确定性&#xff0c; 事件包含的信息量应与其发生的概率负相关 。假设 X X X是一个离散型随机变量&#xff0c;它的取值集合为 { x 1 , x 2 , . . . ,…

损失函数-交叉熵的推导和二分类交叉熵

交叉熵 期望&#xff1a; 期望就是所有随机变量的均值。 E(X)X1*P&#xff08;X1&#xff09;X2*P&#xff08;X2&#xff09;X3*P&#xff08;X3&#xff09; 熵&#xff1a; 熵表示所有信息量的期望。 信息量如何计算呢&#xff1f; 概率值取Log&#xff0c;然后加个负…

深度学习中的损失函数(交叉熵)

0、前景介绍 对于线性回归模型适用于输出为连续值的情景&#xff0c;但是在模型输出是一个像图像类别这样的离散值时。对于这样离散值的预测问题&#xff0c;通常使用一些例如sigmoid/softmax的分类模型。 1. 图像分类任务 假设下面两个模型都是通过softmax的方式得到对于每…