- 点击跳转=>《导航贴》- Unity手册,系统实战学习
- 点击跳转=>《导航贴》- Android手册,重温移动开发
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
本文约6千字,新手阅读需要7分钟,复习需要3分钟 【收藏随时查阅不再迷路】
文章目录
- 👉关于作者
- 👉实践过程
- 😜属性方法
- TabHost的常用方法
- TabWidget常用属性
- TabWidget常用方法
- TabHost.TabSpec类定义的常用方法
- 😜示例
- 👉其他
👉实践过程
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"--><TabWidgetandroid:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="50dp" /><FrameLayoutandroid:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="50dp"><!--Tab页1--><LinearLayoutandroid: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"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="芝麻粒儿:标签一" /></LinearLayout><!--Tab页2--><LinearLayoutandroid: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"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="芝麻粒儿:标签二" /></LinearLayout><!--Tab页3--><LinearLayoutandroid: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"><Buttonandroid: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则不用。
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。