浅谈android的选项卡TabHost

保姆级教程:用xmir-patcher一键解锁Redmi AX3000路由器的SSH(附视频演示) 本文提供Redmi AX3000路由器SSH解锁的保姆级教程,详细介绍了使用xmir-patcher工具一键解锁SSH的步骤,包括环境搭建、工具获取、图形化操作详解及常见问题排查。解锁后,用户可通过SSH连接实现刷机、插件安装、网络优化等高级功能,提升路由器性能。 阅读详情

今天简单总结了下TabHost,总体来说,有三种形式(现在为止只发现这3种)。

首先要了解一般的结构


<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:id="@android:id/tabhost">
 
     <TabWidget  相当于几个选项卡
     android:id="@android:id/tabs"
     android:layout_width="wrap_content"
     android:layout_height="fill_parent"/>

<FrameLayout 每个选项卡的内容
     android:id="@android:id/tabcontent"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content" >
</FrameLayout>

</TabHost>

注意id必须写成红字的形式

第一种:那就是用LayoutInflater类,LayoutInflater这个类的作用类似于findViewById(),不同点: LayoutInflater是用来找layout下xml布局文件的,而且它会实例化, 


findViewById()是找具体xml布局文件下的具体widget控件,比如:Button按钮。inflate就相当于将一个xml中定义的布局找出来.因为如果在一个Activity文件里直接用


findViewById()这个方法的话,那么它所对应的是setConentView()中调用的那个layout里的组件.  因此如果在同样的Activity里用到别的layout的话,而且你还要设置这个


layout里的组件(比如:ImageView,TextView)上的内容,那么你就必须用inflate()先将这个layout找出来, 然后再用这个layout对象去找到它上面的组件,然后进行一系列的操作


,inflate()方法中参数:1.想要用的布局文件的id  2.持有选项卡的内容,获取FrameLayout    3.true:将此处解析的xml文件做为根视图View。
代码:
public class TabHostActivity extends TabActivity {     
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
TabHost tabhost = this.getTabHost(); 
LayoutInflater.from(this).inflate(R.layout.tabhost_layout,
tabhost.getTabContentView(), true);  

/**在这里添加的时候:
* 1.必须指定 tab 的内容,必须为 id, 即:setContent(R.id.text)
* 2.必须设置tab 上的文字或图片 , 即:setIndicator("已接电话")
* 3.返回一个 TabHost.TabSpec 对象,其参数用于标识一个 tab 的 tag,即:newTabSpec("tab1")
*/
tabhost.addTab(tabhost.newTabSpec("tab1").setIndicator("已接电话")
.setContent(R.id.text1));
tabhost.addTab(tabhost.newTabSpec("tab2").setIndicator("呼出电话",
getResources().getDrawable(R.drawable.ic_launcher))
.setContent(R.id.text2));
tabhost.addTab(tabhost.newTabSpec("tab3").setIndicator("未接电话")
.setContent(R.id.text3));  
布局文件只需用一个,就可以达到一般选项卡的效果
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@android:id/tabhost">
  <RelativeLayout 
      android:layout_width="fill_parent"
    android:layout_height="fill_parent"
      >
   
<FrameLayout 
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >
<TextView 
  android:id="@+id/first_Tab"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="1"></TextView>
<TextView 
    android:id="@+id/second_Tab"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="2">></TextView>
   


</FrameLayout>
<TabWidget 
    android:id="@android:id/tabs"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:visibility="gone"
    />
</RelativeLayout>
</TabHost>


第二种形式,main.xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@android:id/tabhost">
<RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >
    
<FrameLayout 
   android:id="@android:id/tabcontent"
   android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true">   利用相对布局,设置左面红色所示的属性,可以让TabWidget在 下面。类似于一些软件,如微博中的效果。
</FrameLayout>
   
<TabWidget 
       android:id="@android:id/tabs"
       android:layout_width="fill_parent"   
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true">
       
   </TabWidget>
</RelativeLayout>
</TabHost>


TabNormalActivity.java


package wc.tab.test;




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 TabNormalActivity extends TabActivity {
    private TabHost tabhost=null;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tabhost = getTabHost();  
        tabhost.addTab(tabhost.newTabSpec("111")
        .setIndicator("TAB1")
        .setContent(new Intent(this,FirstActivity.class)));  
        tabhost.addTab(tabhost.newTabSpec("222")
        .setContent(new Intent(this,SecondActivity.class))
        .setIndicator("TAB2"));  
        
    }
}

注意个选项卡都是一个Activity,所以都有它们对应的布局。


第三种形式,就是用其他控件替换TabWidget,比如RadioButton等。注意,如果想用控件代替TabWidget,那么就要把TabWidget的visibility设置为gone,也就是说不可见。

部分代码:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="#ffffff"
    android:orientation="vertical" >


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >


        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >
            
        </FrameLayout>


        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:visibility="gone" >
        </TabWidget>


        <RadioGroup
            android:id="@+id/main_radio"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="bottom"
            android:background="@drawable/maintab_toolbar_bg"
            android:gravity="center_vertical" >


            <RadioButton
                android:id="@+id/radio_button0"
                android:drawableTop="@drawable/icon_1_n"
                android:tag="radio_button0"
                style="@style/main_tab_bottom"
                android:text="@string/main_home" />


            <RadioButton
                android:id="@+id/radio_button1"
                android:layout_marginTop="2dp"
                android:drawableTop="@drawable/icon_2_n"
                android:tag="radio_button1"
                style="@style/main_tab_bottom"
                android:text="@string/main_message" />


            <RadioButton
                android:id="@+id/radio_button2"
                android:layout_marginTop="2dp"
                android:drawableTop="@drawable/icon_3_n"
                android:tag="radio_button2"
                style="@style/main_tab_bottom"
                android:text="@string/main_friends" />


            <RadioButton
                android:id="@+id/radio_button3"
                android:layout_marginTop="2dp"
                android:drawableTop="@drawable/icon_4_n"
                android:tag="radio_button3"
                style="@style/main_tab_bottom"
                android:text="@string/main_square" />


            <RadioButton
                android:id="@+id/radio_button4"
                android:layout_marginTop="2dp"
                android:drawableTop="@drawable/icon_5_n"
                android:tag="radio_button4"
                style="@style/main_tab_bottom"
                android:text="@string/main_other" />


         
        </RadioGroup>
    </LinearLayout>


</TabHost>



MainActivity.ava


package wc.weibo.two;


import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;


public class MainActivity extends TabActivity {
private static final String TAG="TEST";
private TabHost tabHost=null;
private RadioGroup radioGroup=null;
private Intent intent=null;
private TabSpec spec=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTabSpec();
changeTab();
}
//初始化并设置每个选项卡
public void setTabSpec(){
tabHost=this.getTabHost();
//首页选项卡
intent=new Intent("weibo.home");
spec=tabHost.newTabSpec("首页").setIndicator("首页").setContent(intent);
tabHost.addTab(spec);
//消息选项卡
intent=new Intent("weibo.message");
spec=tabHost.newTabSpec("消息").setIndicator("消息").setContent(intent);
tabHost.addTab(spec);
//好友选项卡
intent=new Intent("weibo.friend");
spec=tabHost.newTabSpec("好友").setIndicator("好友").setContent(intent);
tabHost.addTab(spec);
//广场选项卡
intent=new Intent("weibo.square");
spec=tabHost.newTabSpec("广场").setIndicator("广场").setContent(intent);
tabHost.addTab(spec);
//更多选项卡
intent=new Intent("weibo.other");
spec=tabHost.newTabSpec("更多").setIndicator("更多").setContent(intent);
tabHost.addTab(spec);
}
//根据ID获取单选按钮组,并进行监听
public void changeTab(){
radioGroup=(RadioGroup)findViewById(R.id.main_radio);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radio_button0:
tabHost.setCurrentTabByTag("首页");
Log.d(TAG, "首页");
break;
case R.id.radio_button1:
tabHost.setCurrentTabByTag("消息");
Log.d(TAG, "2");
break;
case R.id.radio_button2:
tabHost.setCurrentTabByTag("好友");
Log.d(TAG, "3");
break;
case R.id.radio_button3:
tabHost.setCurrentTabByTag("广场");
Log.d(TAG, "4");
break;
case R.id.radio_button4:
tabHost.setCurrentTabByTag("更多");
Log.d(TAG, "5");
break;

default:
tabHost.setCurrentTabByTag("首页");
break;
}

}
});
}
}

  
以上就是我总结的一部分,希望对你们有帮助,如果有什么地方说的不对的,请与我联系。谢谢
30 中望CAD二次开发(ZRX C++)-windows下的qt开发 本文介绍了中望CAD在windows下,如何使用qt开发插件界面,给出了具体的编码步骤,并生成了模态对话框和非模态对话框,其中非模态对话框可以调用CAD命令,实现交互操作。 阅读详情

相关推荐

LabVIEW与MySQL的连接:软件下载与安装至UDL文件创建全过程

依据个人经验编辑的十分完备的使用教程

tiaowudexiaoyu的博客 5574

[Android] 选项卡组件TabHost

Tab选项卡实现多个分页之间的快速切换,每个分页可以显示不同的内容,在Android平台提供了TabHost组件实现Tab选项卡的功能,选项卡组件的主要功能是可以进行应用程序分类管理。 每个选项卡称为一个Tab,而包含这多个选项卡的容器称为TabHost。 1.TabHost的常用方法 public TabHost (Context context): 创建TabHost类对象 public void addTab(TabHost.TabSpec tabSpec):增加一个tab public Tab.

sam___1的博客 5904

数据分析项目:直播电商用户流失分析

其中,'Tenure'(在网时长)可能是影响用户流失的关键因素,意味着用户在平台上的停留时间越长,流失的可能性可能越低,这提示平台应注重提高用户粘性,增加用户在平台上的活跃度和停留时间。)的分析,挖掘用户流失的原因和模式,分析发现用户投诉处理效率(Complain)、距上次消费时长(DaySinceLastOrder)、会员生命周期(Tenure)等8项核心指标对流失预测贡献度达87%,模型准确率94.58%,并提出相应的建议。重视用户的满意度,及时处理用户的投诉和反馈,不断改进平台的服务和功能。

Nervousr的博客 2459

android RadioGroup+TabHost实现导航栏

1、对于 RadioGroup,是RadioButton的一个组设置,可以实现单选效果。 对于RadioGroup的设置监听setOnCheckedChangeListener(OnCheckedChangeListener listener); OnCheckedChangeListener 是一个接口,接口函数为:   public void onCheckedChanged(RadioGr

Roy的专栏 1208

Matlab实战:水声信号DEMON谱分析从入门到精通(附完整源码)

本文详细介绍了使用Matlab进行水声信号DEMON谱分析的完整流程,从基础理论到实战应用,涵盖信号预处理、包络提取、频谱分析等关键步骤,并附完整源码。特别针对水声通信中的低信噪比环境,提供了多种优化方案和性能提升技巧,帮助读者快速掌握这一水下目标检测的核心技术。

gamma的博客 296

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

android 自定义TabHost选择器

android 自定义TabHost选择器,单选性

u010152805的专栏 902

DCDC--控制方式(Control Mode)

DCDC反馈控制方式

网始如芯个人博客 1万+

Android 自定义TabHost

ps:我们平时在项目中经常用到TabHost作为引导页,实现的方法太多了,这里介绍使用比较多的一种吧 两个效果都是通过xml搭建出来的 这里说明底部的搭建过程 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a

小金子的专栏 3365

基于ESP32的摩托车蓝牙对讲系统开发实践

蓝牙音频传输技术在现代通信中扮演着重要角色,其核心原理是通过无线射频实现数字音频信号的双向传输。在工程实践中,蓝牙HFP协议常用于语音通信场景,而ESP32等嵌入式平台因其低成本和高集成度成为DIY项目的理想选择。本项目通过ESP32-WROOM-32D开发板结合PCM5102 DAC和INMP441数字麦克风等模块,构建了一套摩托车骑行专用的蓝牙对讲系统。该系统特别针对高速移动环境下的风噪抑制和连接稳定性进行了优化,采用数字信号处理技术实现实时降噪,并通过I2S接口确保音频质量。这种方案不仅成本控制在30

weixin_33239721的博客 414

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

安卓选项卡动态滑动

本文会实现一个类似网易新闻(不说网易新闻大家可能不知道大概是什么样子)点击超多选项卡,选项卡动态滑动的效果。  首先来看看布局,就是用HorizontalScrollView控件来实现滑动的效果,里面包含了一个布局。 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tool

小白的究极进化 957

R语言中的混淆矩阵(Confusion Matrix)是一种常用的评估多分类模型性能的工具

除了准确率,混淆矩阵还提供了其他有用的指标,如灵敏度(Sensitivity)、特异度(Specificity)、精确度(Precision)和召回率(Recall)。混淆矩阵通过比较模型预测结果与实际标签的一致性,帮助我们了解模型的分类准确性和错误类型。此外,混淆矩阵还提供了各种错误类型的统计信息,如假阳性(False Positive)和假阴性(False Negative)等。通过混淆矩阵,我们可以了解模型的整体性能和错误类型,从而对模型进行评估和改进。最后,为了更好地理解混淆矩阵的结果,可以使用。

HackSquad的博客 972

浅谈Android选项卡(二)

前面简单介绍了选项卡,下面以及后面的几篇文章介绍下Android选项卡的几种简单实现方法。 http://blog.youkuaiyun.com/xia215266092/article/details/9613897 看到上面的最版本的QQ软件,整个软件的UI框架就是选项卡,一般想到的就是使用Android自带的TabActivity实现。 实现需要一个主界面,来存放选项卡,在布局中需要存

流水不腐小夏 2466

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android中选项卡功能的实现

Android中使用TabHost和TabWidget来实现选项卡功能。TabHost必须是布局的根节点,它包含两个子节点: TabWidget,显示选项卡; FrameLayout,显示标签内容。 实现选项卡功能有两种方法,一种是将多个View放在同一个Activity中,然后使用使用标签来进行切换。另一种是直接使用标签切换不同的Activity。 后一种方法更为常用一些。本文也

cool_android的专栏 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android 选项卡页面实现

首先要添加项目的库依赖: compile 'com.android.support:design:26.0.0-alpha1' 一、MainActivity页面代码: package com.tabfragment; import android.support.design.widget.TabLayout; import android.support.v4.app.Fra

WY1605058341的博客 1682

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android自定义tabhost实现选项卡功能

本例子借鉴与网上的部分内容,目的在于实现选项卡功能,自定义的添加选项卡,自动生成选项条,并且可以自由设置选项卡颜色,设置字体大小,大部分功能都集成到自定义的类里面,我们以后碰到此类功能,只需要调用这个类即可运行效果截图:(1)新建一个xml,用于展示tabhost,注意红色部分为当前项目包名,需要根据实际情况修改:&lt;LinearLayout android:layout_width=...

cf8833的博客 2355

android 选项卡界面

一  用RadioGroup和ViewPager实现选项卡界面 1 定义一个list用来存放选项卡各个界面的view        /**Tab页面列表*/     private List list_view = new ArrayList();     //往列表中添加界面      list_view.add( view1 ); 2  定义监听器和适配器

duduhali的专栏 4524

Android的Tab与TabHost讲解

在Android应用中,经常会用到TabHost选项卡,可以方便地在不同页面间切换。之前看过网上的一些教程,但大多都是一个形式,看得迷迷糊糊,不能让人很好的理解和学习。所以,在此详细地列出了Tab与TabHost的使用方法,有不妥之处,尽请指正!   首先,创建一个选项卡界面,需要使用一个TabHost和TabWidget。这个TabHost必须是根节点的布局,也就是main.xml。其中同时包

极致的专注 无限的热情 5616

Android学习笔记-TabHost选项卡使用

在Android应用中,经常会用到TabHost选项卡,这里借花献佛,把apiDemo例子中的使用方法列举出来,,, 常用的方法有三种: 1. 从一个layout id创建各个tab页 [java] view plaincopy public class Tabs1 extends TabActivity {       @Override

小范屯 867

Android UI学习 - Tab的学习和使用

本文是参考Android官方提供的sample里面的ApiDemos的学习总结。 TabActivity 首先Android里面有个名为TabActivity来给我们方便使用。其中有以下可以关注的函数: public TabHost getTabHost () 获得当前TabActivity的TabHost public TabWidget ...

weixin_34278190的博客 252

下拉框spinner:获取选中值的几种方法

spinner绑定的值一般分3种形式存放:     1、存放在java页面的数组中:{"湖北","武汉","荆州"}     2、存放在strings.xml文件中     3、存放在数据库中,调用接口获得     1、2是在一般的页面中比较常用,个人推荐第2种。这样你的页面看起来不会很乱,而且一般把值存放在xml中,看起来比较专业,呵呵。比如values文件夹中的:arr

Insist Surpass Strive 2221

android自定义Spinner下拉列表框样式

在Android中Spinner就是下拉菜单,它相当于HTML中的标签。 Android中提供的Spinner Widget下拉菜单已经非常好用了,样式也适用, 不过我们还是可以通过定义xml的方式来改变下拉菜单的样式。 l Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值 l  调用set

Insist Surpass Strive 2143

Scroller用法

Android里Scroller类是为了实现View平滑滚动的一个Helper类。通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(context)。设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。 一

Insist Surpass Strive 1068

android模拟器怎么连接本地服务器

有过编程经验的人都知道,连接本地服务器不就是localhost或127.0.0.1这俩个么。不过,当你在android模拟器里面输入这些时候,访问的并不是本地服务器,而是模拟器本身,意思就是说访问的是自己,那么怎么才能访问本地计算机服务器呢? 如果想要在模拟器中连接本地计算机可使用10.0.2.2这个IP.

Insist Surpass Strive 1062

Android选项卡置底的方法

发现很多Android应用的选项卡 都是显示在页面底部的,网上有资料:通过反射获取TabWidget中的私有变量,改变其值。今天反编译了腾讯微薄,发现实现这个很简单,只需将布局文件中标签加个android:layout_gravity="bottom",选项卡就会显示在页面底部,默认是android:layout_gravity="top"。

Insist Surpass Strive 903
上一篇: 模仿网易新闻客户端界面
下一篇: 自定义Android的Spinner
Jymot
博客等级 码龄14年 6粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值