相当郁闷的问题,TabHost选项卡标签图标始终不出现?
在学习Android TabHost布局过程中,很多教程告诉我,这样来显示选项卡标签的图标和文字:
TapSpec spec1 = tabHost.newTabSpec("tab 1");
spec1.setIndicator("选项卡一", getResources().getDrawable(R.drawable.tab_icon));
spec1.setContent(R.id.tab1);
tabHost.addTab(spec1);
折腾来折腾去,setIndicator(label, drawable)这个方法始终不能将标题文字与图标一起显示出来,只有文字标题。
在没将电脑砸了之前,通过万能的stackoverflow.com终于知道确切答案以及相应方法了:
http://stackoverflow.com/questions/10745092/icon-in-tab-is-not-showing-up
其实就是SDK 4.03(冰激凌)下:只有文字标题显示,图标是不显示的。如果将文字标题设置为空字符串,则此时图标可显示。
对于冰激凌下两全其美的方法,只能是自定义标签卡布局,创建一个包含ImageView和TextView组件的界面布局文件 tab_indicator.xml(layout/tab_indicator.xml),然后用setIndicator(View view)方法来设置TabSpec的界面布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dip"
android:layout_height="64dip"
android:layout_weight="1"
android:orientation="vertical"
android:background="@drawable/tab_indicator"
android:padding="5dp"> <ImageView android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
/> <TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
style="?android:attr/tabWidgetStyle"
/>
</RelativeLayout>

接着我们可以在drawable图片资源目录下创建一个tab_info.xml文件,用来指示Tab图标的各状态。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/tab_info_dark"
android:state_selected="true" />
<item android:drawable="@drawable/tab_info_light" />
</selector>

现在就可以通过下面的代码将我们自定义的视图作为一个indicator配置给TapSpec对象。
private void addTab(String label, int drawableId) {Intent intent = new Intent(this, MockActivity.class);TabHost.TabSpec spec = tabHost.newTabSpec(label);<span style="color: #ff0000;">View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);</span>TextView title = (TextView) tabIndicator.findViewById(R.id.title);title.setText(label);ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);icon.setImageResource(drawableId);<span style="color: #ff0000;">spec.setIndicator(tabIndicator);</span>spec.setContent(intent);tabHost.addTab(spec);} | 
像以下方式那样调用上面那自定义addTab方法
tabHost = getTabHost(); //tabHost is a private field
addTab("First", R.drawable.tab_info);
addTab("Second", R.drawable.tab_info);
addTab("Third", R.drawable.tab_info);
注意:当用自定义视图的indicator来添加Tab时,要将strip_enabled属性设置为false。若要兼顾底部strip,那在添加最后一个Tab后设置getTabWidget().setStripEnabled(true);
相当郁闷的问题,TabHost选项卡标签图标始终不出现?的更多相关文章
- jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验
		
jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验 一丶bootstrap的使用 下载资源文件: bootstrap官网 导入 ...
 - Android TabHost 动态修改图标或者动态改变标题
		
那时客户需要实现在TabHost标题上动态显示从数据库获取的个数.起初这样思考的,从数据库 获取个数是非常简单,但是要把获取的个数显示在TabHost标题,思前想后,想用Handler来异步实现消息传 ...
 - 【Android 应用开发】Android - TabHost 选项卡功能用法详解
		
TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105 . 作者 :万境绝尘 转载请注明出处 ...
 - Android - TabHost 选项卡功能用法详解
		
TabHost效果图 : 源码下载地址 : http://download.csdn.net/detail/han1202012/6845105 . 作者 :万境绝尘 转载请注明出处 ...
 - [Xcode 实际操作]三、视图控制器-(2)UITabBarController选项卡(标签)视图控制器
		
目录:[Swift]Xcode实际操作 本文将为你演示,选项卡视图控制器的创建和使用. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Tou ...
 - TabHost选项卡的实现(二):使用Fragment实现
		
在上一篇博客<TabHost选项卡的实现(一):使用TabActivity实现>中,讲解了如何使用TabActivity创建管理选项卡,但是,通过TabActivity创建选项卡的方式已经 ...
 - Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡
		
 <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePa ...
 - android学习--TabHost选项卡组件
		
TabHost是一种非常有用的组件,TabHost能够非常方便地在窗体上放置多个标签页,每一个标签页获得了一个与外部容器同样大小的组件摆放区域.在手机系统的应用类似"未接电话".& ...
 - TabHost选项卡的实现(一):使用TabActivity实现
		
一. TabHost的基本开发流程 TabHost是一种非常实用的组件,可以很方便的在窗口上防止多个标签页,每个标签页相当于获得了一个外部容器相同大小的组件摆放区域. 我们熟悉的手机电话系统" ...
 
随机推荐
- **解释器全局锁(Global Interpreter Lock)
			
解释器全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程. [解决办法就是多进程和协程(协程 ...
 - Python 多进程使用
			
进程通信 方式一.共享内存(进程安全,效率高) 共享变量:multiprocessing.Value 共享数组:multiprocessing.Array 方式二.Manager对象:list, ...
 - js 的 defer 和async属性
			
添加defer延迟属性,脚本将立即下载,但会延迟到整个页面解析完毕后按顺序执行.会先于DOMContentLoaded事件执行. 添加async异步属性,脚本将立即下载,执行时不会等待其他脚本,不一定 ...
 - Unity 输入与控制
			
1. 鼠标输入 有关的方法和变量如下: 在 Unity 中,鼠标位置用屏幕的像素坐标表示,屏幕左下角为(0,0),右上角为(Screen.width,Screen.height). 2. 键盘操作 有 ...
 - Core Data 入门
			
1. 基本概念 Core Data是一种被称为对象关系映射(Object-Relational Mapping,ORM)技术的实现. Core Data 架构图如下: 五个概念: (1)数据模型(Da ...
 - Eclipse使用时遇到的问题
			
Java更新之后,Eclipse运行程序时提示 无法找到Java可执行文件 字符串之间判断用.equals,不能用== String a; String b; if(a.equals(b)){...} ...
 - 使用Cloudrea Manager在CDH集群中添加kafka服务节点,更改borker.id配置后无法启动
			
需要保证meta.properties文件中的broker.id和cloudrea manager的web页面上kafka配置的broker.id一致,最好让server.properties中的br ...
 - Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson
			
Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gso ...
 - 381. Insert Delete GetRandom O(1) - Duplicates allowed允许重复的设计1数据结构
			
[抄题]: Design a data structure that supports all following operations in average O(1) time. Note: Dup ...
 - spring boot配置mybatis和事务管理
			
spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spri ...