Android初级控件TabHost

article/2025/9/9 15:24:15

TabHost我们都知道是用来实现导航栏布局来切换页面的,这个也是元老级的控件了,现在逐渐被TabLayout,BottomNavigationBar,使用RadioButton自定义。。。等等给取代了。TabHost有个好处就是它添加的是Activity而不像上面那些全部使用Fragment来显示内容。

1.实现的效果图

这里写图片描述

2.主布局中使用TabHost

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayout
        android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><FrameLayout
            android:id="@android:id/tabcontent"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><!--添加选项卡容器--><TabWidget
            android:id="@android:id/tabs"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>
</TabHost>

3.我们需要对个页面进行状态保存,自定义了底部布局。注释都写的很清楚

public class MainActivity extends AppCompatActivity {//用于添加每一个选项卡的idprivate String[] tags = {"A_tag", "B_tag", "C_tag", "D_tag"};//所添加选项卡的文本信息private String[] titles = {"新闻", "图片", "视频", "收藏"};//所添加选项卡的图片信息private int[] images = {R.drawable.baoming, R.drawable.jiakao,R.drawable.maiche, R.drawable.xueche};//用于跳转至不同的Activityprivate Intent[] intents = new Intent[4];@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TabHost tabHost = (TabHost) findViewById(R.id.tabhost);TabWidget tabWidget = (TabWidget) findViewById(android.R.id.tabs);
//        tabWidget.setDividerDrawable(null);//设置tabWeight没有竖线分割tabWidget.setBackgroundColor(Color.WHITE);//初始化activity管理者LocalActivityManager manager = new LocalActivityManager(MainActivity.this, false);//通过管理者保存当前页面状态manager.dispatchCreate(savedInstanceState);//将管理者类对象添加至TabHosttabHost.setup(manager);init_intent();for (int i = 0; i < intents.length; i++) {//加载底部导航栏布局LayoutInflater inflater = this.getLayoutInflater();View view = inflater.inflate(R.layout.tab, null);TextView textView = (TextView) view.findViewById(R.id.tv_item);ImageView imageView = (ImageView) view.findViewById(R.id.image);textView.setText(titles[i]);imageView.setImageResource(images[i]);//创建选项卡TabHost.TabSpec spec = tabHost.newTabSpec(tags[i]);spec.setIndicator(view);//设置每个页面的内容spec.setContent(intents[i]);//将创建的选项卡添加至tabHost上tabHost.addTab(spec);}}//每个页面放置的Activitypublic void init_intent() {intents[0] = new Intent(this, NewsActivity.class);intents[1] = new Intent(this, PhotoActivity.class);intents[2] = new Intent(this, VideoActivity.class);intents[3] = new Intent(this, CollectionActivity.class);}
}

4.如果你只需要添加文字而不用图片的话,只需要将for循环内的代码稍稍改一点就OK了

for (int i = 0; i < intents.length; i++) {TabHost.TabSpec spec = tabHost.newTabSpec(tags[i]);spec.setIndicator(titles[i]);//设置文字spec.setContent(intents[i]);//设置内容//将创建的选项卡添加至tabHost上tabHost.addTab(spec);
}

5.底部tabWidget的布局tab.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><!--tabWeight布局--><ImageView
        android:id="@+id/image"android:layout_width="24dp"android:layout_height="24dp" /><TextView
        android:id="@+id/tv_item"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@drawable/color"android:textSize="20sp" />
</LinearLayout>

6.使用TabHost的时候,当你页面内有输入框的时候你会发现输入法会把底部tabWeight顶起来。我们可以在注册activity的时候对输入法做一些限制

<activity   android:name=".MainActivity"android:windowSoftInputMode="stateHidden|adjustPan" />

7.android:windowSoftInputMode一些属性的介绍

  • “stateUnspecified” 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。

  • “stateUnchanged” 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

  • “stateHidden” 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

  • “stateAlwaysHidden” 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

  • “stateVisible” 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)。

  • “stateAlwaysVisible” 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity。

  • “adjustUnspecified” 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

  • “adjustResize” 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

  • “adjustPan” 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

每个Activity的布局就非常简单这里就不贴出来了,实现起来还是比较简单的就是比较喜欢它添加的是Activity而不是Fragment,如果你不喜欢使用TabHost那你可以看下这两个导航栏效果

Android Support Design库之TabLayout:http://blog.csdn.net/a_zhon/article/details/52529993

安卓BottomNavigationBar酷炫导航栏:http://blog.csdn.net/a_zhon/article/details/52431767

tab页面图片资源下载链接:链接:http://pan.baidu.com/s/1pKSj1X5 密码:l3id


http://chatgpt.dhexx.cn/article/9ofga1GV.shtml

相关文章

Android中TabHost嵌套TabHost

在嵌套TabHost时&#xff0c;先后遇到了以下情况&#xff1a; 问题1&#xff1a;内部TabHos无显示&#xff0c;只显示了其中的一个Activity&#xff1b; 解决&#xff1a;按下文比对主子TabHos的布局文件和java文件并修改&#xff1b; 问题2&#xff1a;如上所做后&#xff…

Android的Tab与TabHost讲解

在Android应用中&#xff0c;经常会用到TabHost选项卡,可以方便地在不同页面间切换。之前看过网上的一些教程&#xff0c;但大多都是一个形式&#xff0c;看得迷迷糊糊&#xff0c;不能让人很好的理解和学习。所以&#xff0c;在此详细地列出了Tab与TabHost的使用方法&#xff…

Android - TabHost 选项卡功能用法详解

一、实例 二.、TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabH…

【转】TabHost详解

请大家尊重作者版权&#xff0c;转载请标明出处&#xff1a;http://blog.csdn.net/harvic880925/article/details/17120325 前言&#xff1a;今天仔细研究了下TabHost&#xff0c;主要是为了实现微信底部导航栏的功能&#xff0c;最后也给出一个链接&#xff0c;这位老兄用TabH…

Android入门第十一篇之TabHost,TabWidget

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; 这回要介绍的是Android的Tab控件&#xff0c;Tab控件可以达到分页的效果&#xff0c;让一个屏幕的内容尽量丰富&#xff0c;当然也会增加开发的复杂程度&#xff0c;在有必要的时候再使用。An…

android Tabhost部件

本文结合源代码和实例来说明TabHost的用法。 使用TabHost 可以在一个屏幕间进行不同版面的切换&#xff0c;例如android自带的拨号应用&#xff0c;截图&#xff1a; 查看tabhost的源代码&#xff0c;主要实例变量有&#xff1a; private TabWidget mTabWidget; …

TabHost的用法

http://blog.csdn.net/lastsweetop/article/details/5566200 本文结合源代码和实例来说明TabHost的用法。 使用TabHost 可以在一个屏幕间进行不同版面的切换&#xff0c;例如android自带的拨号应用&#xff0c;截图&#xff1a; 查看tabhost的源代码&#xff0…

ViewPager和Tabhost结合,可滑动的tabhost

有朋友反映资源下载下来有问题&#xff0c;我看了下&#xff0c;确实是&#xff0c;已更新下面文章中的代码和资源&#xff0c;现在可以好好的跑起来了&#xff0c;另外还改动了个小地方的逻辑&#xff0c;因为我在使用中出了点小错&#xff0c;需要的可以试下。另外&#xff0…

TabSpec和TabHost实例

TabSpec与TabHost TabHost相当于浏览器中浏览器分布的集合&#xff0c;而Tabspec则相当于浏览器中的每一个分页面。d在Android中&#xff0c;每一个TabSpec分布可以是一个组件&#xff0c;也可以是一个布局&#xff0c;然后将每一个分页装入TabHost中&#xff0c;TabHost即可将…

Android中的TabHost

介绍 有时&#xff0c;我们想在一个window中显示多个视图&#xff0c;这时就需要用到Tab容器。在Android里它叫TabHost。 使用TabHost有两种方式&#xff1a; 在相同的activity中使用TabHost导航多个视图使用TabHost导航多个Activity(通过intents) Tab应用的结构 TabHost的A…

Android修行手册 - TabHost回忆

往期文章分享 点击跳转>《导航贴》- Unity手册&#xff0c;系统实战学习点击跳转>《导航贴》- Android手册&#xff0c;重温移动开发 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过…

Android TabHost的使用

1. 最简单的TabHost&#xff0c;Tab来自于layout下的元素 &#xff08;只从1个Layout中取数据&#xff09; &#xff08;1&#xff09;效果图 &#xff08;2&#xff09;代码 1&#xff09;tab_demo.xml <?xml version"1.0" encoding"utf-8"?&g…

TabHost详解

前言&#xff1a;今天仔细研究了下TabHost&#xff0c;主要是为了实现微信底部导航栏的功能&#xff0c;最后也给出一个链接&#xff0c;这位老兄用TabHost基本做出来了微信导航栏。 正文 TabHost的实现分为两种&#xff0c;一个是不继承TabActivity&#xff0c;一个是继承自…

Android选项卡TabHost功能和用法

1、选项卡TabHost介绍 TabHost可以方便地在窗口上放置多个标签页&#xff0c;每个标签页相当于获得了一个与外部容器大小相同的组件摆放区域 TabHost是一个简单的容器&#xff0c;提供如下两种方法来创建选项卡 newTabSpec(String tag):创建选项卡 addTab(TabHost.TabSpec tabS…

[Android] 选项卡组件TabHost

Tab选项卡实现多个分页之间的快速切换&#xff0c;每个分页可以显示不同的内容&#xff0c;在Android平台提供了TabHost组件实现Tab选项卡的功能&#xff0c;选项卡组件的主要功能是可以进行应用程序分类管理。 每个选项卡称为一个Tab&#xff0c;而包含这多个选项卡的容器称为…

交叉熵:计算交叉熵损失函数nn.CrossEntropyLoss()

首先要提出的问题是。。。什么是损失函数&#xff1f;干什么的&#xff08;功能&#xff09;&#xff1f;类型有哪些&#xff1f; 1.什么是损失函数&#xff1f; 损失函数&#xff08;loss function&#xff09;或 代价函数&#xff08;cost function&#xff09;是将随机事件或…

softmax函数与交叉熵损失函数

本文主要介绍了当前机器学习模型中广泛应用的交叉熵损失函数与softmax激励函数。 这个损失函数主要应用于多分类问题&#xff0c;用于衡量预测值与实际值之间的相似程度。 交叉熵损失函数定义如下: L C E ( y ^ , y ∗ ) − ∑ i 1 N c l a s s e s y i ∗ l o g ( y i ^ …

【交叉熵损失函数】关于交叉熵损失函数的一些理解

目录 0. 前言1.损失函数&#xff08;Loss Function&#xff09;1.1 损失项1.2 正则化项 2. 交叉熵损失函数2.1 softmax2.2 交叉熵 0. 前言 有段时间没写博客了&#xff0c;前段时间主要是在精读一些计算机视觉的论文&#xff08;比如yolov1&#xff09;&#xff0c;以及学cs23…

CrossEntropy交叉熵损失函数及softmax函数的理解

参考链接1 参考链接2 参考链接3 参考链接4 &#xff08;一&#xff09;什么是Sigmoid函数和softmax函数&#xff1f; 提到二分类问题容易想到逻辑回归算法&#xff0c;而逻辑回归算法最关键的步骤就是将线性模型输出的实数域映射到[0, 1]表示概率分布的有效实数空间&#xff…

【基础篇】交叉熵损失函数(Cross Entropy Loss)

文章目录 1. 理论知识2. 代码 1. 理论知识 我们需要关注那些按常理来说不太可能发生的事情。『信息量』就是用来度量事件的不确定性&#xff0c; 事件包含的信息量应与其发生的概率负相关 。假设 X X X是一个离散型随机变量&#xff0c;它的取值集合为 { x 1 , x 2 , . . . ,…