发布时间:2026/9/2 19:26:12
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/9/2 19:26:12

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

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

2026/9/2 19:26:12

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

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

2026/9/2 19:26:12

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

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

2026/9/2 19:41:13

基于MATLAB的手写英文字母图像识别系统设计与实现

摘要:随着图像处理和模式识别技术的不断发展,手写字符识别在智能办公、教育辅助和人机交互等领域具有较好的应用价值。 项目概览 项目简介 随着图像处理和模式识别技术的不断发展,手写字符识别在智能办公、教育辅助和人机交互等领域具有较好…

2026/9/2 19:41:13

三款AI论文网站实测:从大纲到降重怎么选才不踩坑?

写论文这事,最怕的不是写不出来,而是写得心里没底。 选题改了七八版还怕选重了,文献下载了两百篇越读越乱,参考文献格式调到崩溃,交稿前还得担心重复率和AIGC检测。今年开学季一到,又有一波人在搜“AI论文工…

2026/9/2 19:41:13

全球开放不等于全球可用:HStudio落地验证框架与实战指南

昨天下午,同事在工作群里转了一条消息:HStudio 已面向全球 172 个国家和地区开放。群里第一波反应几乎都是“终于可以用上了”。但等到真正有人去注册时,问题才浮出来:这个工具究竟面向谁?开放意味着所有功能都开放吗&…

2026/9/2 19:41:13

Claude Code组合插件实战:Skill与Plugin提升AI编程效率

最近在持续打磨 Claude Code 的使用流程,发现一个很现实的问题:刚装好的 Claude Code 确实很强,但每次做代码审查、写提交信息、拆需求、生成周报时,都要反复向它解释背景和规则;团队里几个同学用的方式也不统一&#…

2026/9/2 19:41:13

2026年10款硬核降AIGC软件推荐:AIGC检测轻松过,查重降AI两不误

随着知网、维普、万方等主流学术平台对AIGC检测标准不断收紧,论文通过率面临严峻挑战。如何有效降低AI痕迹与查重率,成为众多学者和学生的共同关注点。本文将实测对比10款主流降AI工具,助你精准选择最适合的解决方案。为什么需要降 AI 率工具…

2026/9/2 19:36:12

AD2S1210驱动代码深度解析:五个例程的移植经验与调试避坑指南

简介:这是一套关于AD2S1210旋转变压器至数字转换器的驱动代码资源,面向伺服控制、电机控制及角度测量类项目的嵌入式开发者。资源基于官方例程整理,共包含五个独立示例,对应不同应用场景的初始化、配置、数据读取与状态监测流程。…

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…