TabActivity、TabHost、NavController

发布时间:2026/10/24 15:04:56

TabActivity、TabHost、NavController 1.TabActivity 继承自Activity其内部定义好了TabHost可以通过getTabHost()获取TabHost。TabHost 包含了两种子元素一些可以自由选择的Tab及 与这些tab对应的内容tabContent在layout的TabHost下它们分别对应 TabWidget (用于展示标签页 id固定为tabs )和 FrameLayout(用于展示隶属于各个标签的具体布局 id固定为tabcontent)。Tabhost默认的布局文件TabHost xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:idandroid:id/tabhostandroid:layout_widthfill_parentandroid:layout_heightfill_parent LinearLayoutandroid:orientationverticalandroid:gravitybottomandroid:layout_widthfill_parentandroid:layout_heightfill_parent TabWidgetandroid:idandroid:id/tabsandroid:layout_widthfill_parentandroid:layout_heightwrap_content /FrameLayoutandroid:idandroid:id/tabcontentandroid:layout_widthfill_parentandroid:layout_height200dip /FrameLayout/LinearLayout/TabHost2.最简单的TabActivity示例不用设置setContentView(R.layout.main); 不依靠布局文件public class ILoveConactActivity extends TabActivity implements TabHost.TabContentFactory,OnTabChangeListener{public void onCreate(Bundle icicle){super.onCreate(icicle);//取得TabHost对象TabHost tabHostthis.getTabHost();tabHost.setOnTabChangedListener(this);for(int i0;i4;i){String tabItemTitletabi;String tabItemTagi;TabSpec tabSpectabHost.newTabSpec(tabItemTag);tabSpec.setIndicator(tabItemTitle);//或者setIndicator(CharSequence label, Drawable icon) setIndicator(View view)/*或者tabSpec.setContent(R.id.viewId);//R.id.viewId是在布局文件中的view的id。setIndicator(View view)setContent(TabContentFactory contentFactory)时会动态确定内容。setContent(Intent intent) Specify an intent to use to launch an activity as the tab content.*/tabSpec.setContent(this);tabHost.addTab(tabSpec);}tabHost.setCurrentTab(1);//或者setCurrentTabByTag(String tag)//加上下面这4行代码使TabWidget到底部TabWidget tabWidget this.getTabWidget(); //或者tabHost.getTabWidget();LinearLayout layout (LinearLayout) tabHost.getChildAt(0);layout.removeViewAt(0);layout.addView(tabWidget);//把tabWidget 从第一个位置移除再添加到下面来。}Overridepublic void onTabChanged(String tabId){// TODO Auto-generated method stub}Overridepublic View createTabContent(String tag){TextView viewnew TextView(this);view.setText(tab content tag);return view;//不能返回null否则会报错。}}intent必须是一个关联Activity的intent。android中文api (59) —— TabHost.TabSpec - 农民伯伯 - 博客园3.对TabWidget的理解(1)TabWidget 为 horizontal 的 LinearLayout(2)且 其包含的标签又是一个RelativeLayout(3) 每个标签RelativeLayout 里面包含2个ViewTextView和ImageView推算出其布局为?xml version1.0 encodingutf-8?LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationhorizontalandroid:layout_widthfill_parentandroid:layout_heightfill_parentRelativeLayoutandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightwrap_contentImageView /TextView //RelativeLayoutRelativeLayoutandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightwrap_contentImageView /TextView //RelativeLayoutRelativeLayoutandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightwrap_contentImageView /TextView //RelativeLayoutRelativeLayoutandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightwrap_contentImageView /TextView //RelativeLayout/LinearLayout4.基于默认的Tabhost布局文件自定义布局文件?xml version1.0 encodingutf-8?LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightfill_parent!-- TabHost必须包含一个 TabWidget和一个FrameLayout--TabHost android:idid/tabhostandroid:layout_widthfill_parentandroid:layout_heightwrap_contentLinearLayoutandroid:orientationverticalandroid:layout_widthfill_parentandroid:layout_heightfill_parent!-- TabWidget的id属性必须为 android:id/tabs--TabWidget android:idandroid:id/tabsandroid:orientationhorizontalandroid:layout_widthfill_parentandroid:layout_heightwrap_content/TabWidget!-- FrameLayout的id属性必须为 android:id/tabcontent--FrameLayout android:idandroid:id/tabcontentandroid:layout_widthfill_parentandroid:layout_heightfill_parentTextView android:idid/view1android:layout_widthfill_parentandroid:layout_heightfill_parent/TextView android:idid/view2android:layout_widthfill_parentandroid:layout_heightfill_parent/TextView android:idid/view3android:layout_widthfill_parentandroid:layout_heightfill_parent//FrameLayout/LinearLayout/TabHost/LinearLayout5.TabHost中的子Activity虽然是用Intent参数来启动但实际上并没有去启动一个全新的Activity。维护了几个子View6.ActivityGroup的问题它是用来做Tab切换用的不是用做栈导航的在一个ActivityGroup中连续开启同一个Activity第2个及之后和第1个在创建菜单的函数调用顺序上不同在一个ActivityGroup中连续开启同一个Activity非同一个Activity后面的创建菜单的函数不再调用了...另外也没有StartActivityForResult函数。ActivityGroup中可以指定界面中的各个部分内容来自不同的Activity这时这些Actvitiy只作为内容管理单元。NavHostFragmentNavHostFragment 是 Android Jetpack Navigation 组件里的一个特殊 Fragment用来当作导航的宿主容器负责展示当前应该显示的那个页面也就是导航图里的“目的地”。‌‌ 核心作用‌容器角色‌它是 Activity 和各个 Fragment 之间的“展示窗口”导航图里定义的所有页面都要通过它来显示。‌自动管理‌它会自动帮你处理页面之间的切换、返回栈管理以及转场动画。‌绑定关系‌每个 NavHostFragment 都配有一个 ‌NavController‌NavController 是实际执行导航操作的核心对象。‌‌
延伸阅读

更多相关文章

2026/10/23 19:21:47

UI交互动画从概念到实战:提升产品演示质感的关键技术

先聊一个真实场景:同样是一套 SaaS 控制台,静态稿看起来功能齐全、界面干净,但一到产品演示阶段,按钮点击有没有反馈、页面切换是否平滑、模块出现有没有节奏,会直接决定观众对“产品完成度”的判断。很多时候功能差异…

2026/10/22 0:52:15

懂交互的产品演示:交互动画设计原理与前端实现指南

懂交互的产品演示,不是把界面做得好看,而是在正确的时间点,让用户看到正确的变化。这个变化可能是按钮按下后的微反馈,可能是卡片展开时的转场节奏,也可能是数据加载过程中的引导动画。很多团队做产品演示时&#xff0…

2026/10/23 5:12:53

视频素材批量处理:FFmpeg+yt-dlp+OCR打造本地流水线

“猫咪狂奔记(Simons Cat )”这个名字,如果你关注动画短片或表情包,大概率见过那只线条感很强、表情极其丰富的白色小猫,以及它的铲屎官 Simon。很多人在看这类动画时会顺手保存一些动图或片段,但真到自己要…

2026/10/24 15:04:47

基于SimPEG的地下水数值模拟实战:从跑通到二次开发

简介:这份资源面向地球物理、水文地质及环境工程领域的学习者与研究人员,提供基于开源 Python 库 SimPEG 子模块 SimPEG.FLOW 编写的地下水流方程示例工程,用于理解达西定律下的正向模拟与参数反演流程。压缩包共 20 个文件,约 45…

2026/10/24 14:59:46

Java营业厅工程:用Swing与文件持久化学习分层业务架构

简介:一份基于Java技术的移动端应用开发案例,围绕“嗖嗖移动大厅”的登录、服务浏览与交互功能展开,特别适合Java Web初学者、课程设计者以及需要借助注释理解代码逻辑的开发者。压缩包共1个文件,为单个HTML页面,整体大…

2026/10/24 14:59:46

Intel IPU:重构云数据中心控制平面的硬件确定性引擎

简介:本资源为Intel资深专家臧锐主讲的《Intel IPU在云数据中心中的实践与探索》技术报告PDF,面向云计算架构师、基础设施工程师及高性能数据中心研发人员,聚焦IPU如何应对虚拟化、存储加速、加密压缩与安全隔离等核心挑战。报告深入剖析IPU与…

2026/10/24 14:59:46

基于C++与GTK3的IPS补丁工具实现:解析、应用与避坑指南

简介:基于 GTK3 的 ips-patcher 是一款用 C 写成的 IPS 补丁程序,包含命令行模式与图形界面模式,面向需要给 ROM 或二进制数据打 IPS 补丁的玩家、开发者以及想学习 GTK 编程的初学者。包内共 15 个文件,其中 6 个 cpp 源文件与 4…

2026/10/24 14:59:46

设计模式复习实战指南:从七大原则到重点模式代码落地

简介:这份《大话设计模式复习》文档面向具备一定面向对象编程基础、工作1至3年的研发人员,系统梳理设计模式的核心知识体系。内容从设计模式的定义、分类、特点与应用场景切入,详细讲解单一职责、开放-封闭、依赖倒转、里氏代换、迪米特法则、…

2026/10/24 14:59:46

NetSpot Wi-Fi干扰分析实战:从信道冲突到热力图校准

简介:本资源是一份面向家庭用户与小型办公场景的Wi-Fi网络优化实战指南,聚焦NetSpot这款专业级无线分析工具的全流程使用解析。内容覆盖软件下载安装、Discover模式信号扫描与排序、Graph连续性诊断、Detail频段深度分析(含2.4GHz与5GHz频道规…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑