Android高级界面组件的学习(二)

简介: 在上个博客的基础上我继续巩固LayoutInflater的使用,同时介绍一下Tabhost。我们在很多地方会看到手机界面的顶部或底部有一些可切换的图标,这些图标的监听事件是会让界面进行平滑跳转的,比如微信下面的四个小图标:微信,通讯录,发现,我,这个是怎么实现的呢?我虽然不知道微信是不是用Tabhost实现的,但是Tabhost无疑是一种可选的方式。

在上个博客的基础上我继续巩固LayoutInflater的使用,同时介绍一下Tabhost。我们在很多地方会看到手机界面的顶部或底部有一些可切换的图标,这些图标的监听事件是会让界面进行平滑跳转的,比如微信下面的四个小图标:微信,通讯录,发现,我,这个是怎么实现的呢?我虽然不知道微信是不是用Tabhost实现的,但是Tabhost无疑是一种可选的方式。下面我就通过代码来介绍一下Tabhost,以及它的实现类似微信的效果。

首先我们要获得TabHost和TabhostWidget,也就是下面这四行代码(非常重要):

private TabHost tabhost; // 标签组
private TabWidget tabWidget;
tabhost = getTabHost(); 
tabWidget = getTabWidget();
然后我们就可以利用LayoutInflater来动态加载标签对应的界面布局了,其中的R.layout.tabhost1对应的就是点击标签1时的标签布局显示,而同理R.layout.tabhost2就是点击标签1时的标签布局显示,也就是最下方的图标。我们把这些布局文件传递给View对象,同时让他们对应java文件,即Tabhost_1.class和Tabhost_2.class,制作成TabSpec对象,添加到TabHost中。为了区分,Tabhost_1的界面背景为黑色,Tabhost_2的界面背景为白色,因为很容易实现,这里就不细说了。

LayoutInflater inflater = LayoutInflater.from(this);
View v1 = inflater.inflate(R.layout.tabhost1, null);
View v2 = inflater.inflate(R.layout.tabhost2, null);
TabSpec tabspec1 = tabhost.newTabSpec("1").setIndicator(v1)
		.setContent(new Intent(this, Tabhost_1.class));
TabSpec tabspec2 = tabhost.newTabSpec("2").setIndicator(v2)
		.setContent(new Intent(this, Tabhost_2.class));
tabhost.addTab(tabspec1);
tabhost.addTab(tabspec2);
tabhost.setOnTabChangedListener(this);//注册标签改变的监听

因为标签是会有切换的,因此在上面的代码中对TabHost进行了注册监听,具体注册监听的方法如下,我这里是简单的用两个Toast来进行提示。

// tabhost改变监听
@Override
public void onTabChanged(String tabId) {
for (int i = 0; i < tabWidget.getChildCount(); i++) {
	if (tabhost.getCurrentTab() == 0) {
		Toast.makeText(this, "This is 1", 0).show();
	} else if (tabhost.getCurrentTab() == 1) {
		Toast.makeText(this, "This is 2", 0).show();
	}
}
示例图如:



目录
相关文章
|
2天前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
16 2
|
12天前
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation &#39;org.greenrobot:eventbus:3.3.1&#39;`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
|
17天前
|
编解码 安全 Android开发
探索iOS与Android开发的差异:从界面到性能
【6月更文挑战第10天】在移动应用开发的广阔天地中,iOS和Android两大平台各占山头,它们在设计理念、用户体验、性能优化等方面展现出独特的魅力。本文将深入探讨这两大系统在开发过程中的主要差异,从用户界面设计到性能调优,揭示各自背后的技术逻辑与创新策略,为开发者提供全面的视角和实用的开发指南。
|
21天前
|
XML Android开发 数据格式
【Android UI】使用RelativeLayout与TableLayout实现登录界面
【Android UI】使用RelativeLayout与TableLayout实现登录界面
27 5
|
21天前
|
XML Android开发 数据格式
【Android UI】中间对齐UI组件
【Android UI】中间对齐UI组件
12 1
|
1天前
|
存储 程序员 定位技术
程序员必知:安卓的四大组件
程序员必知:安卓的四大组件
|
1月前
|
架构师 网络协议 算法
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
Android高级架构师整理面试经历发现?(大厂面经+学习笔记(1)
|
1月前
|
Android开发
Android高级开发面试题以及笞案整理,实战解析
Android高级开发面试题以及笞案整理,实战解析
|
1月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
1月前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)