美化TabHost

Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战 本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。 阅读详情
安卓默认的TabHost样式是比较朴素的,可以对它进行样式美化。对布局进行美化的时候需要在布局文件中体现出来。TabHost标签应由一个TabWidget和一个FrameLayout组成。其中TabWidget定义了标签的属性,而frameLayout定义了标签的内容。
一、最普通tabHost
我们将 activity_main.xml修改为:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost" 
   android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
       <TabWidget android:id="@android:id/tabs"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content">
</TabWidget>
<FrameLayout android:id="@android:id/tabcontent"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
</FrameLayout>
</TabHost>
注意点:1.各个标签的id基本是必须要交这个名字的;
MainActivity.java中代码如下:
public class MainActivity extends  TabActivity {
TabHost tabHost;
      @Override
      public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获取TabHost对象
             tabHost = getTabHost();    
//新建一个newTabSpec,设置标签和图标(setIndicator),设置内容(setContent)
tabHost.addTab(tabHost.newTabSpec("Main_page")
.setIndicator("",getResources()
.getDrawable(android.R.drawable.ic_menu_call))
.setContent(new Intent(this,Main.class)));
tabHost.addTab(tabHost.newTabSpec("Search")
.setIndicator("",getResources()
.getDrawable(android.R.drawable.ic_menu_camera))
.setContent(new Intent(this,Main.class)));
......
//设置当前现实哪一个标签
tabHost.setCurrentTab(0);    //0为标签ID
      }
}
注意点:1.TabHost定义需要全局,方便在其他acitivity中调用;
2.tabHost = getTabHost()方法可以获取一个tabhost对象;
3.tabHost.addTab添加一个标签,注意后面的一堆set和get...然后其中的Main.class是自己新建的一个acitivity,这样四个标签页可以跳转到四个acitivity(在这个demo中是跳转到同一个activity)。
这样就可以得到第一个最普通的tabHost版本如下:
美化TabHost
其中的进度圈就是Main.class这个acitivity的内容。

二、下置在底下版(如大家普遍使用的app,微信、微博等)
将TabHost下置在屏幕下方只需要在xml布局文件中添加一句话:
android:layout_alignParentBottom="true"
这是TabWidget的属性。
但是为了使这个alignParentBottom生效,必须将整个tabs封装在一个RelativeLayout中。
所以xml文件变为:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/tabhost" 
   android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
       <RelativeLayout
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
      <TabWidget android:id="@android:id/tabs"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_alignParentBottom="true">
</TabWidget>
<FrameLayout android:id="@android:id/tabcontent"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
</FrameLayout>
</RelativeLayout>
</TabHost>
.java文件是不变的。
那么置底的tabhost效果图即为:
美化TabHost

三、美化tabHost
1.修改tabHost图标
将图标复制到res->drawable文件夹下(任意一个即可)
为了使按键美观一些,每个图标至少需要两种属性:选中,未选中。
如,不太会ps的我将利用如下两个图标分别表示选中和未选中:
美化TabHost 美化TabHost

将图片命名为mainpage或其他存放到drawable目录下。
然后修改.java中的代码改变tab属性:
tabHost.addTab(tabHost.newTabSpec("Main_page")
.setIndicator("",
getResources().getDrawable(R.drawable.mainpage))
.setContent(new Intent(this,Main.class)));
setIndicator中,第一个参数为tab显示的文字,如果需要文字辅助则在此添加字符串,否则置为空即可。第二个参数为图标,图标需要从drawable文件夹中取出,同时需要为这个图标设置内容,即点击这个图标会显示什么事件。

这只是改变了图标本身,但是动画并未改变,保留了原来android默认的样式,这些均可以修改。只需要再定义一个state List.(每个tab按钮都需要一个state list)。
在drawable文件夹下新建xml文件,定义selector.
drawable/tab_mainpage.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:drawable="@drawable/mainpage_light" android:state_selected="true"/>
      <item android:drawable="@drawable/mainpage"/>
</selector>
那么在设置tab属性的时候,就利用这个布局文件,而不是单一的图片:
tabHost.addTab(tabHost.newTabSpec("Main_page")
.setIndicator("",
getResources().getDrawable(R.drawable.tab_mainpage) )
.setContent(new Intent(this, Main.class)));

2.修改tabHost背景
默认的tabHost背景好朴素&……,可以将它进行修改。修改方式也许有更好的,但我选择的是在.java文件中进行修改。每个tab键是一个view类型的,可以对它直接进行backgroud的设置。
int i;
for (i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#ECE2C2"));}

3.进一步美化
做到这一步基本上就出来形了,不过有细心的人会发现,这个tabHost下面总是留有一条,在被点击的时候会变黄,非常影响美观。这是由于tabHost控件本来是会出现在页面上方的,那么这一条也是按钮效果之一。把它去掉的方法不难,我采用了简单粗暴的,修改margin_bottom值的方法:
在xml中,TabWidget下加入一个属性:android:layout_marginBottom="-3dip"
这里用负值是没有问题的,而且-3左右刚好能把那一条去掉。整个界面就干净多了。

四、最终效果图如下:(分别选择主页和搜索tab)
美化TabHost 美化TabHost

附:代码汇总: activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@android:id/tabhost"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >

      <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <TabWidget
                  android:id="@android:id/tabs"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:layout_alignParentBottom="true" 
                  android:layout_marginBottom="-3dip">
            </TabWidget>

            <FrameLayout
                  android:id="@android:id/tabcontent"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent" >
            </FrameLayout>
      </RelativeLayout>

</TabHost>

MainAcivity.java:
package com.example.h1;

import android.app.TabActivity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TabHost;

public class MainActivity extends TabActivity {
TabHost tabHost;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取TabHost对象
tabHost = getTabHost();
// 新建一个newTabSpec,设置标签和图标(setIndicator),设置内容(setContent)
tabHost.addTab(tabHost
.newTabSpec("Main_page")
.setIndicator("",
getResources().getDrawable(R.drawable.tab_mainpage))
.setContent(new Intent(this, Main.class)));
tabHost.addTab(tabHost
.newTabSpec("Search")
.setIndicator("",
getResources().getDrawable(R.drawable.tab_search))
.setContent(new Intent(this, Main.class)));
tabHost.addTab(tabHost
.newTabSpec("Shelf")
.setIndicator("",
getResources().getDrawable(R.drawable.tab_shelf))
.setContent(new Intent(this, Main.class)));
tabHost.addTab(tabHost
.newTabSpec("Setting")
.setIndicator("",
getResources().getDrawable(R.drawable.tab_setting))
.setContent(new Intent(this, Main.class)));

int i;
for (i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
tabHost.getTabWidget().getChildAt(i)
.setBackgroundColor(Color.parseColor("#ECE2C2"));
}
// 设置当前现实哪一个标签
tabHost.setCurrentTab(0); // 0为标签ID
}
}

QT+SOEM主站协议库实战指南—从编译到嵌入式应用 本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。 阅读详情

相关推荐

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例

本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方

xiaoheshang_123的博客 290

android选项卡TabHost功能和用法详解(1)

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。欢迎大家一起交流讨论啊~《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。[外链图片转存中…(img-PzI6M2Yp-1713284506082)]欢迎大家一起交流讨论啊~

2401_84149855的博客 1208

重回童年的经典系列☀️| 【坦克大战3D版】游戏制作+解析

带你重回童年的经典系列——坦克大战3D版制作,感兴趣的可以看看呀~

努力前行,总会成为自己心中的那道光 5万+

android 炫酷的选项卡,炫酷Bootstrap美化Tabs选项卡特效

插件描述:这是一款炫酷Bootstrap美化Tabs选项卡特效。该选项卡特效基于Bootstrap原生Tab选项卡的基础上,使用CSS样式来进行美化,增加了tab标签的伸缩动画功能。使用方法在页面中引入bootstrap相关文件和fontawsome字体图标文件。HTML结构选项卡的基本HTML结构如下:SECTION-1SECTION-2SECTION-3Section1选项卡一的内容Sect...

weixin_39883670的博客 462

Android中实现可滑动的Tab的3种方式

这篇文章主要介绍了Android中实现可滑动的Tab的3种方式,需要的朋友可以参考下 1. 第一种,使用 TabHost + ViewPager 实现 该方法会有一个Bug,当设置tabHost.setCurrentTab()为0时,ViewPager不显示(准确的说是加载),只有点击其他任意一个tab后才会加载。 有解的同学吼一声~~~~~~~

像个孩子壹洋 1160

Harmony OS — TabList和Tab分页栏

文章目录1、TabList 是什么?2、TabList 常用属性3、Tab 常用属性4、实战:三个页签栏切换5、了解更多 1、TabList 是什么? 简单:页签栏组件 官方:Tablist可以实现多个页签栏的切换,Tab为某个页签。子页签通常放在内容区上方,展示不同的分类。页签名称应该简洁明了,清晰描述分类的内容。 2、TabList 常用属性 (1)设置默认状态和选中状态的字体颜色和indicator的颜色 <TabList ... ohos:normal_text_color="

qq_27494201的博客 1085

Android|更好看的Tab选择卡FlipTabs框架的使用方法

更好看的Tab选择卡FlipTabs框架的使用方法

纸鱼PaperFish的博客 478

tabhost美化

安卓默认的TabHost样式是比较朴素的,可以对它进行样式美化。对布局进行美化的时候需要在布局文件中体现出来。TabHost标签应由一个TabWidget和一个FrameLayout组成。其中TabWidget定义了标签的属性,而frameLayout定义了标签的内容。 一、最普通tabHost 我们将activity_main.xml修改为: <TabHostxmlns:android=

liuxiaocong2的博客 447

Android之Tab分页标签的实现方法一-----美化TabHost(四)

安卓默认的TabHost样式是比较朴素的,可以对它进行样式美化。对布局进行美化的时候需要在布局文件中体现出来。TabHost标签应由一个TabWidget和一个FrameLayout组成。其中TabWidget定义了标签的属性,而frameLayout定义了标签的内容。 一、最普通tabHost 我们将activity_main.xml修改为:  xmlns:android=

youngkingyj的专栏 4094

Android TabHost美化与设计

用到的布局xml文件内容如下:    android:id="@android:id/tabhost"    android:layout_width="fill_parent"    android:layout_height="fill_parent">           android:orientation="ve

大猴子的学习园地 2257

自定义TabHost

大家好,今天我为大家分享TabHost中怎样修改TabWidget样式。在很多界面美观的应用中很多都用到了TabHost,但他们要比系统默认的要漂亮得多。先看几张图:                              京东商城底部菜单栏                             新浪微博底部菜单栏    好了,看到这些漂亮的菜单栏是不

天宝000专栏 443

Android项目中TabHost标签切换

TabHost在Android APP中经常看到,觉得挺不错的,就参照做了个,但标签的切换效果没有添加,最多改下背景色,不太美观,于是在这次做的时候加了图片和文件颜色改变,变得美观很多。

Hornsey的博客 655

android用户界面之TabHost教程实例汇总

一、TabHost基础教程1.最全的Android的Tab与TabHost讲解  http://www.apkbus.com/android-720-1-1.html 2.Android入门第十一篇之TabHost,TabWidget http://www.apkbus.com/android-215-1-1.html 3.Android---UI篇---TabWidget(切换卡) http:/...

weixin_34168700的博客 96

Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)

Android之Tab分页标签的实现方法一-----TabActivity和TabHost的结合(三)之方式三

kkfdsa132的专栏 6079

安卓精美底部导航栏的实现TabHost

先看效果图:

u012784277的专栏 965

Android开发 漂亮底部Tab 标签 选项卡制作教程

我们经常使用的程序,如qq、微博、微信、百思不得姐等等都会在程序下方有一个tab切换页面,这样的一个功能不仅是方便,更是一种习惯,我做了一个,效果不是特别好,但也能看。

MY的专栏 6107

ElementPlus· tab切换/标签切换 + 分页

ElemenPlus组件:tab切换/标签切换、分页

weixin_42479421的博客 6130

android TAb分页菜单实现总结

首先说明的是,我们做APP开发,Tab分页不管是顶部还是底部,都是必不可少的,网上也有太多太多的实现方式了,我在这里总结一下: 第一种方式:TabHost原始方式:(链接另一篇文章) 这里实现的是底部菜单: 布局文件:(我们通过RelativeLayout 可以把TabWidget定位在底部) &lt;?xml version="1.0" encoding="...

mmdev 264

解决Tabhost标签中文字和图标不能共存的问题。

在manifest.xml中的theme换成Theme.Black,如果是Theme.Holo 貌似不行,只显示标题,不显示图片 具体步骤为:AndroidManifest.xml---Mainfest---Appliction---Them---System Resource---Them.Black(或Theam.Light)

u011094862的专栏 584

微机原理课设:Proteus仿真(利用8086 、 8255A 、8253A设计流水灯)

微机原理课程设计的Proteus仿真(利用8086 、 8255A 、8253A设计流水灯)

粗糙集简约算法+图形可视化

利用python解释器运行main.py程序即可!!!注意请不要移动和改动平台文件夹“data_dimension_reduction”中的文件,运行程序必须在“data_dimension_reduction”目录下运行。若有疑问请联系我!!!讲解博文:https://blog.csdn.net/weixin_46043195/article/details/121967953?spm=1001.2014.3001.5502

上一篇: Tabs选项卡放在底部的简单应用
下一篇: Android中深入研究Service
狼之血舞
博客等级 码龄14年 34粉丝 29原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值