TabHost两种实现方式
第一种:继承TabActivity,从TabActivity中用getTabHost()方法获取TabHost。只要定义具体Tab内容布局就行了.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/FrameLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="所有通话记录"></TextView><TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="已接来电"></TextView><TextView android:id="@+id/TextView03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="未接来电"></TextView></FrameLayout>
package com.example.testtabhost;import android.app.TabActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.widget.TabHost;
import android.widget.Toast;
import android.widget.TabHost.OnTabChangeListener;public class MainActivity extends TabActivity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TabHost th = getTabHost();//声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout//from(this)从这个TabActivity获取LayoutInflater //R.layout.main 存放Tab布局//通过TabHost获得存放Tab标签页内容的FrameLayout //是否将inflate 拴系到根布局元素上LayoutInflater.from(this).inflate(R.layout.activity_main, th.getTabContentView(), true); //通过TabHost获得存放Tab标签页内容的FrameLayout,//newTabSpecd的作用是获取一个新的 TabHost.TabSpec,并关联到当前 TabHost//setIndicator的作用是指定标签和图标作为选项卡的指示符.//setContent的作用是指定用于显示选项卡内容的视图 ID.th.addTab(th.newTabSpec("all").setIndicator("所有通话记录", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView01));th.addTab(th.newTabSpec("ok").setIndicator("已接来电",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView02));th.addTab(th.newTabSpec("cancel").setIndicator("未接来电",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.TextView03));//setOnTabChangeListener的作业是注册一个回调函数,当任何一个选项卡的选中状态发生改变时调用. th.setOnTabChangedListener(new OnTabChangeListener() {@Overridepublic void onTabChanged(String tabId) {Toast.makeText(MainActivity.this, tabId, Toast.LENGTH_LONG).show();}}); }
}
第二种:不用继承TabActivity,在布局文件中定义TabHost即可,但是TabWidget的id必须是
@android:id/tabs,FrameLayout的id必须是@android:id/tabcontent。TabHost的id可以自定义.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/hometabs"android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@+id/tabhost"android:layout_width="wrap_content"android:layout_height="wrap_content"><LinearLayoutandroid:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TabWidget android:id="@android:id/tabs" android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"></TabWidget><FrameLayout android:id="@android:id/tabcontent"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextView android:id="@+id/view1"android:layout_width="fill_parent"android:layout_height="fill_parent"/><TextView android:id="@+id/view2"android:layout_width="fill_parent"android:layout_height="fill_parent"/><TextView android:id="@+id/view3"android:layout_width="fill_parent"android:layout_height="fill_parent"/></FrameLayout></LinearLayout></TabHost>
</LinearLayout>
package com.example.testtabhost2;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TabHost;
import android.widget.TabWidget;public class MainActivity extends Activity {private static final String TAG = "MainActivity";protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHost tabHost = (TabHost) findViewById(R.id.tabhost);tabHost.setup();TabWidget tabWidget = tabHost.getTabWidget();tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("tab1", getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.view1));tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("tab3").setContent(R.id.view3));tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("tab2").setContent(R.id.view2));final int tabs = tabWidget.getChildCount();Log.i(TAG, "***tabWidget.getChildCount() : " + tabs);final int tabWidth = 90;final int tabHeight = 45;for (int i = 0; i < tabs; i++) {/* final View view = tabWidget.getChildAt(i);view.getLayoutParams().width = tabWidth;view.getLayoutParams().height = tabHeight;final TextView tv = (TextView) view.findViewById(android.R.id.title);tv.setTextColor(this.getResources().getColorStateList(android.R.color.black));MarginLayoutParams tvMLP = (MarginLayoutParams)tv.getLayoutParams();tvMLP.bottomMargin = 8;*/}}}
转载于:https://www.cnblogs.com/lanzhi/p/6469829.html
TabHost两种实现方式相关推荐
- C++中的两种绑定方式(静态绑定、动态绑定)
两种绑定方式 静态绑定:在编译时刻,根据指针或引用变量的静态类型来决定成员函数属于哪一个类. 动态绑定:在运行时刻,根据指针或引用变量实际指向或引用的对象类型(动态类型)来确定成员函数属于哪一个类. ...
- (C++)string 的两种输入方式和输出方式
注:头文件如下 #include<string> #include<cstdio> #include<iostream>using namespace std; 注 ...
- 三十张图片让你彻底弄明白图的两种遍历方式:DFS和BFS
1 引言 遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次.图的遍历.遍历过程中得到的顶点序列称为图遍历序列. 2 深度优先搜索 2.1 算法思想 ...
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- Vivado IP的两种综合方式:Global 和 Out-Of-Context
在最新的Vivado的版本中,定制IP的时候,会有一个综合方式的选择,如下图所示.可以看到一种叫做"Global",一种叫"Out-Of-Context (OOC)&qu ...
- IOS单例的两种实现方式
单例模式算是开发中比较常见的一种模式了.在iOS中,单例有两种实现方式(至少我目前只发现两种). 根据线程安全的实现来区分,一种是使用@synchronized ,另一种是使用GCD的dispatch ...
- chrome拦截弹窗问题的两种解决方式
chrome拦截弹窗问题的两种解决方式 参考文章: (1)chrome拦截弹窗问题的两种解决方式 (2)https://www.cnblogs.com/CaiDaili/p/9228455.html ...
- Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)
在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...
- redis的两种持久化方式详解
一.背景 在实际开发中,为了保证数据的完整性,防止数据丢失,我们除了在原有的传统数据库保存数据的同时,最好是再用redis持久化再保存一次数据.如果仅仅是使用redis而不进行持久化配置的话,当red ...
最新文章
- iOS之CAEmitterLayer粒子引擎
- 编写Java 制作留言板_JSP+Servlet+JavaBean制作简单留言板
- NOIP模拟题——dun
- IntelliJ IDEA 建空包合并问题。
- 心跳检测以及应用层心跳包机制设计
- C++ STL vector的输出
- 数字图像处理 频率域锐化 MATLAB实验
- 计算机应用能力考试用书有哪些,全国专业技术人员计算机应用能力考试用书
- linux的码是什么东西,在Linux内核中的UD2操作码的目的是什么?
- vue3新增Suspense组件
- java中PriorityQueue优先级队列使用方法
- 消防物联网,为逆行英雄守住第一道生命线
- 机器学习的分类(监督学习、非监督学习、半监督学习)
- OrCAD DSN文件无故消失解决办法
- 从冬奥会看中国科技:全民感谢的高速摄像机,有何玄机?
- android防止程序休眠,android 设置 永不休眠
- Maven实战 4 -- Maven核心概念
- C# 中的MessageBox 弹出提示框(消息框)的用法
- R学习之统计实验(五)--赶火车问题(R语言编程)-----数模
- LYL程序员小白的理解之简单易懂的Arduino的串口通讯