Android修行手册 - TabHost回忆
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
欢迎关注公众号【空名先生】获取更多资源和交流!
👉前提
这是小空坚持写的Android新手向系列,欢迎品尝。
新手(√√√)
大佬(√)
👉实践过程
Hello,大家好啊,我是小空,大家在开发中一定遇见过切换卡(聊天类软件底部的切换),不论是自己写还是三方优秀框架实现方式有很多种,但其实官方为我们有提供这个组件,只是兼容性差不被人常用而已。
TabHost是个容器,包含TabWidget和FrameLayout(其内有多个布局)。
TabWidget代表的是用来点击切换选项卡的按钮,你的FrameLayout内部有几个一级布局,这个就有几个选项卡
TabSpec :布局写好之后就需要管理,而管理靠的是TabSpec
先说总结:该控件已经被遗弃了,不怎么用了,使用TabLayout替代,如果还想学习,可以继续。
😜属性方法
TabHost的常用方法
- public TabHost (Context context): 创建TabHost类对象
- public void addTab(TabHost.TabSpec tabSpec):为TabHost增加一个tab
- public TabHost.TabSpec newTabSpec(String tag):创建一个TabHost.TabSpec对象,并且关联到TabHost
- public View getCurrentView():取得当前的View对象
- public String getCurrentTabTag():获得当前标签选项卡的Tag选项内容
- public int getCurrentTab():获取当前标签选项卡的ID
- public void setCurrentTab(int index):设置当前显示的Tab编号
- public View getCurrentTabView():获取当前标签选项卡的视图
- public void setCurrentTabByTag(String tag):设置当前显示的Tab名称
- public void setOnTabChangedListener(TabHost.OnTabChangeListener l):设置选项监听事件
- public void setup():使用findViewById()加载TabHost,在新增一个标签选项卡之前,必须调用它,即使是kotlin
- public FrameLayout getTabContentView():获取并保存标签选项卡内容
- public void clearAllTabs():清除所有关联到当前TabHost的标签选项卡
TabWidget常用属性
- android:divider: 可绘制对象,被绘制在选项卡窗口间充当分割物
- android:tabStripEnabled:确定是否在选项卡中绘制
- android:tabStripLeft:用来绘制选项卡下面的分割线左边部分的可视化对象
- android:tabStripRight: 用来绘制选项卡下面的分割线右边部分的可视化对象
TabWidget常用方法
- public TabWidget (Context context):创建TabWidget 实例
- public int getTabCount(): 返回标签选项卡的数量
- public void addView(View child):向TabWidget增加view
- public void focusCurrentTab(int index):设置当前标签选项卡并且使其获得焦点
- public void setCurrentTab(int index):设置当前标签选项卡
TabHost.TabSpec类定义的常用方法
- public TabHost.TabSpec setContent(int viewId):设置要Layout中的组件id
- public TabHost.TabSpec setContent(Intent intent):指定一个activity的Intent对象作为选项卡内容,会跳转,相当差劲,因为这个影响很大
- public TabHost.TabSpec setIndicator(View view):设置一个view为选项卡
- public TabHost.TabSpec setIndicator(CharSequence label):设置一个选项卡为文本
- public TabHost. setIndicator (ChaSequence label ,Drawable icon):设置选项卡包含文本和图标
- **public String getTag():获取tag选项字符串
😜示例
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/idTabHost"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--TabWidget 每个Tab的选项,即Tab标签,如果想要放到底部,则可用android:layout_gravity="bottom"-->
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="50dp" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="50dp">
<!--Tab页1-->
<LinearLayout
android:id="@+id/tab_1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:background="@color/color_00ff00"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="芝麻粒儿:标签一" />
</LinearLayout>
<!--Tab页2-->
<LinearLayout
android:id="@+id/tab_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:background="@color/color_ff0000"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="芝麻粒儿:标签二" />
</LinearLayout>
<!--Tab页3-->
<LinearLayout
android:id="@+id/tab_3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:background="@color/color_0000ff"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="芝麻粒儿:标签三" />
</LinearLayout>
</FrameLayout>
</TabHost>
其中【@+id/tabhost】有两种情况:如果你的activity是继承的非TabActivity(这个是系统内置的),则id可以随便取,如果是继承的TabActivity则可以将id设置为内置的【android:id="@android:id/tabhost"】,在代码中直接使用getHost()方法获取到TabHost对象。
其他id如:【"@android:id/tabs】【"@android:id/tabcontent】都是内置的且建议这样用。
class ActivityTabHost : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tab_host)
idTabHost.setup();
val page1 = idTabHost.newTabSpec("tab1").setIndicator("这是").setContent(R.id.tab_1)
idTabHost.addTab(page1)
val page2 = idTabHost.newTabSpec("tab2").setIndicator("标签").setContent(R.id.tab_2)
idTabHost.addTab(page2)
val page3 = idTabHost.newTabSpec("tab3").setIndicator("选项卡").setContent(R.id.tab_3)
idTabHost.addTab(page3);
}
}
如果继承的普通Acitivity,则必须适应tabHost的setup方法,如果继承的是TabActivity则不用。
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:芝麻粒儿 的个人主页 - 专栏 - 掘金 (juejin.cn)
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
- 点赞
- 收藏
- 关注作者
评论(0)