相当郁闷的问题,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);

时间: 2024-08-04 17:15:59

相当郁闷的问题,TabHost选项卡标签图标始终不出现?的相关文章

jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验

jQuery---bootstrap的下载使用,栅格(12个格子),轮播图,矢量图字体图标,进度条,选项卡,标签,表达校验 一丶bootstrap的使用 下载资源文件: bootstrap官网 导入 // 1.导入样式 <link rel="stylesheet" href="bootstrap-3.3.7-dist/css/bootstrap.css"> // 2.导入bootstrap的js,依赖jquery,先导入jquer <script

android学习--TabHost选项卡组件

TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个标签页,每个标签页获得了一个与外部容器相同大小的组件摆放区域.在手机系统的应用类似"未接电话"."已接电话"."呼出电话"等. 1 . TabHost提供了两个方法来创建选项卡.添加选项卡 newTabSpec(String tag)  : 创建选项卡 addTab(TabHost.TabSpec  tabSpec) : 添加选项卡 2.TabHost 切换选项卡触发的

Android TabHost 动态修改图标或者动态改变标题

那时客户需要实现在TabHost标题上动态显示从数据库获取的个数.起初这样思考的,从数据库 获取个数是非常简单,但是要把获取的个数显示在TabHost标题,思前想后,想用Handler来异步实现消息传递. 如果将图标或者标题的变量设置为全局变量,你们应该知道我的目的吧.也就是为了在这个类不断的进行赋值. 先来简单的认识下TabHost吧. xml的文件代码: <?xml version="1.0" encoding="utf-8"?> <TabHo

[Xcode 实际操作]三、视图控制器-(2)UITabBarController选项卡(标签)视图控制器

本文将为你演示,选项卡视图控制器的创建和使用. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Touch Class]->[Next]-> [Class]:FirstSubViewController [Subclass of]:UIViewController [Language]:Swift ->[Next]->[Create] 1 import UIKit 2 3 class FirstSubViewControll

Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡

 <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePageIndicator(原文链接:http://blog.csdn.net/zhangphil/article/details/44752213),自己写了一个底部带有滑块.且当ViewPager页面切换时候选项卡也随之相应切换,且滑块也随之相应动态滑动效果得控件.但写的太过于紧耦合,不利于复用,所以现在重构

1.1 Illustrator选项卡标签的使用

本节课将为您演示选项卡标签的使用.首先依次点击[文件 > 打开]命令,弹出打开窗口,打开一份示例文件. Illustrator互动教程-酷课堂 在弹出的[文件]菜单中,点击[打开]命令,弹出[打开]窗口. Illustrator互动教程-酷课堂 然后在弹出的[打开]窗口中,选择文件夹中的所有示例文件. Illustrator互动教程-酷课堂 点击[打开]按钮,打开选中的所有文件. Illustrator互动教程-酷课堂 刚才选中的文档已经被打开,并且以标签,即一次显示一份文档的方式,显示在系统界

TabHost 选项卡

Refer to :http://android.toolib.net/reference/android/widget/TabHost.html tabHost=(TabHost)findViewById(android.R.id.tabhost);????//获取TabHost对象 tabHost.setup();????//初始化TabHost组件 LayoutInflater inflater = LayoutInflater.from(this); ????// 声明并实例化一个Lay

EasyUI - Tabs 选项卡标签

基本效果: 效果图: html代码: <div id="tab"> <div title="tab1" > <p>tab1</p> </div> <div title="tab2"> <p>tab2</p> </div> <div title="tab3"> <p>tab3</p> &

Tabhost选项卡上图片和文字不能同时显示的解决方案

尽管当前谷歌已经不推荐使用tabhost了,但是作为初学者,掌握这个经典的控件还是非常有必要的,在上手这个控件以后我们会发现一个问题,添加选项卡时同时添加了文字和图片但是Tabhost却只显示出了文字,针对这个问题我们可以对tabhost的选项卡即tabSpec自定义来进行解决,布局文件比较简单就不多说了,直接看MainActivity.java中的实现吧. 自定义方法如下: public View composeLayout(String s, int i) { LinearLayout la