- 浏览: 433713 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
何谓标签 印象最深刻的应该是这个
现在 我们将通过一系列的扩展来研究之
写道
1. 自定义TabActivity 使得标签处于屏幕下方
2. 各个标签所用布局 既可在 *.xml 中定义 也可在 *.java 中定义
3. 更改标签布局
2. 各个标签所用布局 既可在 *.xml 中定义 也可在 *.java 中定义
3. 更改标签布局
1. 标签页 在 屏幕下方
写道
一个典型的标签Activity 是由2 部分构成的 且其id都有规定 即:
* TabWidget 用于展示标签页 id=tabs
* FrameLayout 用于展示隶属于各个标签的具体布局 id=tabcontent
* TabWidget 用于展示标签页 id=tabs
* FrameLayout 用于展示隶属于各个标签的具体布局 id=tabcontent
* 基本布局如下:
<?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" > <LinearLayout android:orientation="vertical" android:gravity="bottom" android:layout_width="fill_parent" android:layout_height="fill_parent" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="200dip" > <RelativeLayout android:id="@+id/view1" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello to Johnny.Griffin!" android:layout_centerInParent="true" android:textStyle="bold|italic" /> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/robot" android:layout_toLeftOf="@id/text" /> </RelativeLayout> <TextView android:id="@+id/view2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="创新源于模仿!" /> <TextView android:id="@+id/view3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="欢迎进入 droid 世界!" /> <ImageView android:id="@+id/view4" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/robot" /> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </TabHost>
* 得到TabHost tHost 仅在TabActivity中有效
tHost = this.getTabHost();
* 创建4个标签 并指定所使用的布局
public static final String Tab1 = "Tab1"; public static final String Tab2 = "Tab2"; public static final String Tab3 = "Tab3"; public static final String Tab4 = "Tab4"; public static final String Tab5 = "Tab5"; tHost.addTab(tHost.newTabSpec(Tab1).setIndicator("Tab 1", getResources().getDrawable(R.drawable.icon)).setContent(R.id.view1)); tHost.addTab(tHost.newTabSpec(Tab2).setIndicator("Tab 2", getResources().getDrawable(R.drawable.beijing_small)).setContent(R.id.view2)); tHost.addTab(tHost.newTabSpec(Tab3).setIndicator("Tab 3").setContent(R.id.view3)); tHost.addTab(tHost.newTabSpec(Tab4).setIndicator("Tab 4").setContent(R.id.view4));
* 设定监听器 用于监听 标签间切换事件
tHost.setOnTabChangedListener(new OnTabChangeListener(){ @Override public void onTabChanged(String tabId) { // TODO Auto-generated method stub } });
* emulator 运行情况:
2. 在 *.java 中定义标签所需布局
public class CustomLayout implements TabHost.TabContentFactory { Activity activity; LayoutInflater inflaterHelper; LinearLayout layout; public CustomLayout (Activity a) { activity = a; inflaterHelper = a.getLayoutInflater(); } /** {@inheritDoc} *///tag 标记各个标签 public View createTabContent(String tag) { return addCustomView(tag); } public View addCustomView(String id){ layout = new LinearLayout(activity); layout.setOrientation(LinearLayout.VERTICAL); if(id.equals(Tab1)){ ImageView iv = new ImageView(activity); iv.setImageResource(R.drawable.beijing_big); layout.addView(iv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); } else if(id.equals(Tab2)){ EditText edit = new EditText(activity); layout.addView(edit, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); Button btn = new Button(activity); btn.setText("OK"); btn.setWidth(100); layout.addView(btn, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); RadioGroup rGroup = new RadioGroup(activity); rGroup.setOrientation(LinearLayout.HORIZONTAL); RadioButton radio1 = new RadioButton(activity); radio1.setText("Radio A"); rGroup.addView(radio1); RadioButton radio2 = new RadioButton(activity); radio2.setText("Radio B"); rGroup.addView(radio2); layout.addView(rGroup, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); } else if(id.equals(Tab3)){ LinearLayout.LayoutParams param3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); layout.addView(inflaterHelper.inflate(R.layout.hello, null),param3); } else if(id.equals(Tab4)){ TextView tv = new TextView(activity); tv.setText("HelloTags!"); tv.setGravity(Gravity.CENTER); layout.addView(tv); } return layout; } }
* 如何使用:
CustomLayout ct = new CustomLayout(this); tHost.addTab(tHost.newTabSpec(Tab4).setIndicator("Tab 4").setContent(ct));
* emulator 运行结果:
3. 改变标签布局
写道
可能很多人对TabActivity 不满意 原因之一:其很不美观 而不美观的根源就是:标签的问题 其图像和文字相互覆盖 导致的
那么 我们可以自己扩展么? 当然
那么 我们可以自己扩展么? 当然
写道
TabWidget 理解:
1. TabWidget 为 horizontal 的 LinearLayout
2. 且 其包含的标签又是一个RelativeLayout
3. 每个标签RelativeLayout 里面包含2个View: TextView ImageView
1. TabWidget 为 horizontal 的 LinearLayout
2. 且 其包含的标签又是一个RelativeLayout
3. 每个标签RelativeLayout 里面包含2个View: TextView ImageView
因此 我们甚至可以推算出其布局为:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView /> <TextView /> </RelativeLayout> <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView /> <TextView /> </RelativeLayout> <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView /> <TextView /> </RelativeLayout> <RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <ImageView /> <TextView /> </RelativeLayout> </LinearLayout>
* 去掉系统默认的布局 即 在 setIndicator() 中置空 修改如下:
tHost.addTab(tHost.newTabSpec(Tab1).setIndicator("").setContent(ct));
写道
可能有人会说:那我不调用setIndicator() 不久可以了么 不行 否则 会报错
* 自己定义布局 并 指定显示的内容
public View composeLayout(String s, int i){ LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); TextView tv = new TextView(this); tv.setGravity(Gravity.CENTER); tv.setSingleLine(true); tv.setText(s); layout.addView(tv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); ImageView iv = new ImageView(this); iv.setImageResource(i); layout.addView(iv, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); return layout; }
* 得到 TabWidget 实例 tw
LinearLayout ll=(LinearLayout)tHost.getChildAt(0); tw =(TabWidget)ll.getChildAt(1);
* 得到 TabWidget 内的具体某个Layout 并使用上面的布局 composeLayout()
public void updateWidgetView(int i,String text,int image){ RelativeLayout rl =(RelativeLayout)tw.getChildAt(i); rl.addView(composeLayout(text,image)); }
* emulator 运行截图 // 前面 3个是使用新布局 最后一个是使用TabActivity 默认的布局 哪个好看 大家自己选择之
that's all!
评论
13 楼
zhoujianghai
2010-09-01
LinearLayout ll=(LinearLayout)tHost.getChildAt(0);
tw =(TabWidget)ll.getChildAt(1);
lz,这句tw =(TabWidget)ll.getChildAt(1);应该是tw =(TabWidget)ll.getChildAt(0)吧,
xml结构是这样子的吧:<TabHost>
<LinearLayout>
<TabWidget />
<FrameLayout>
<LinearLayout/>
</FrameLayout>
</LinearLayout>
</TabHost>
tw =(TabWidget)ll.getChildAt(1);
lz,这句tw =(TabWidget)ll.getChildAt(1);应该是tw =(TabWidget)ll.getChildAt(0)吧,
xml结构是这样子的吧:<TabHost>
<LinearLayout>
<TabWidget />
<FrameLayout>
<LinearLayout/>
</FrameLayout>
</LinearLayout>
</TabHost>
12 楼
javetu_7
2010-07-04
假如总共有5个标签,但显示时每次显示3个,剩下2个通过拖动方式进入当前显示界面该如何实现
11 楼
gryphone
2010-06-14
darrendu 写道
你改进的TabWidget怎样改进啊?把你推算的代码发到<TabWidget>标签内吗?
应该这么说:
1. 去除默认的布局
2. 追加定制化布局
10 楼
darrendu
2010-06-14
你改进的TabWidget怎样改进啊?把你推算的代码发到<TabWidget>标签内吗?
9 楼
chenjuncong
2010-06-01
yuankai 写道
有N个tab显示超级难看
我现在有四个tab,但每个tab里的字都不能完全显示出来,除了把字体调小,在用tab的基础上还有没有其他的办法,像控制tab的间距。
各位发表,谢~
8 楼
yzhong_sa
2010-05-08
建议不要用tab,直接自己实现一条bar,然后处理点击每个item的事件就是了。。
7 楼
yuankai
2010-05-07
tab.removeView(view)
6 楼
wangchao20062896
2010-05-06
通过addtab可以动态添加切换卡 但是怎么关闭某个特定的切换卡呢?
5 楼
CmdMac
2010-03-17
找了好久 终于找到了 谢谢楼主分享。。。
4 楼
yuanyao
2010-03-03
考虑如果这样的话,软件的移植会不会有问题.
3 楼
springfield
2010-03-01
根据实际需求吧,反正我觉得通常的需求都不会要求太多的Tab,就像上面那个拨号的,如果过多的话就不用Tab了。
2 楼
gryphone
2010-02-27
yuankai 写道
有N个tab显示超级难看
对的 我的方法也仅仅是稍微好点而已 其实如果Tab太多的话 建议使用Gallery + FrameLayout 会更好点 然否?
1 楼
yuankai
2010-02-26
有N个tab显示超级难看
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2609Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5925ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3170MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19015CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3138获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9440PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5955Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14445SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1452Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2224流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3226NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1221自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3158模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2471TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3985View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1837Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1737*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1522我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
在Android开发中,TabActivity是早期用来实现底部标签栏切换页面的一种方式,它结合了TabHost和ActivityGroup来实现多页面间的切换。然而,随着Android版本的更新,TabActivity已经逐渐被Fragment和ViewPager等组件...
在Android应用开发中,"Fragment + TabActivity实现标签内跳转"是一种常见的界面设计模式,它使得用户可以在同一个界面上通过不同的Tab切换查看不同的内容。TabHost是Android系统提供的一个用于实现标签页功能的组件...
Postern-3.1.3,https抓包工具,兼容Android14+,解决了:Failure [INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 16] 的安装错误问题。...使用教程参见:...
在Android开发中,`TabActivity`是早期版本中用于实现标签栏切换的一种方式,它可以创建一个带有多个选项卡的活动,每个选项卡对应一个单独的`Activity`或`Fragment`。然而,`TabActivity`在Android API Level 13...
在Android开发中,`TabActivity`是早期版本中用于实现标签栏切换页面的一种方式。它允许用户通过点击不同的标签在多个视图之间进行切换,提供了一种直观且友好的用户界面。然而,随着Android SDK的发展,`...
在Android开发中,`TabActivity`是早期版本中用于实现底部标签栏切换界面的一种方式。这篇笔记主要探讨了`TabActivity`的使用方法及其背后的原理,同时也涉及到了一些与之相关的工具和源码分析。 首先,`...
在Android应用开发中,`TabActivity`是一种常见的用于创建多标签界面的设计模式。它允许用户在不同的标签之间切换,每个标签通常对应一个独立的功能模块。然而,随着Android SDK的更新,`TabActivity`已被废弃,...
在Android应用开发中,`TabActivity`曾是实现标签页切换的主要方式,但自API 17之后,它已被弃用。现在,开发者通常使用`Fragment`和`ViewPager`等组件来实现类似的功能,这既符合最新的Android设计指南,也能提供更...
在Android开发中,`TabActivity`是早期API版本中用于实现多标签页切换的一种方式。本文将深入探讨`TabActivity`的使用,以及如何通过源码理解和应用它,同时也会介绍一些相关的工具来辅助开发。 `TabHost`是`...
此外,TabActivity 还存在强制依赖关系,它的布局文件必须将TabHost 作根标签,并且 id 必须为"@android:id/tabhost",必须有 TabWidget 标签,且它的 id 必须是"@android:id/tabs",还有加载 Activity 的 View 容器...
`TabActivity`结合了`TabHost`和`TabWidget`,使得开发者能够方便地构建这种多标签的布局。 首先,我们来详细了解一下`TabHost`。`TabHost`是Android框架中的一个类,它用于管理一个或多个`TabWidget`和一个`...
Obfuscation.sh,Obfuscation移植到LLVM10.0.1以及更高版本的脚本,使用方法:https://blog.csdn.net/tabactivity/article/details/108995746
make_ext4fs,linux下system.img打包工具 使用教程参见: https://blog.csdn.net/tabactivity/article/details/125993855
接下来,在`TabActivity`的初始化代码中,我们需要为每个选项卡设置标签和对应的`Intent`: ```java TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); tabHost.setup(); TabSpec tab1 = tabHost....
1.2 添加Tab,并为每个Tab指定对应的Intent和标签: ```java TabSpec spec1 = tabHost.newTabSpec("tab1"); spec1.setIndicator("Tab1", getResources().getDrawable(R.drawable.tab_icon1)); spec1.setContent(new ...
在Android开发中,TabActivity是早期用于实现分页视图的一种方式,它允许用户通过不同的Tab切换不同的页面。本文将详细讲解如何在Android应用中使用TabActivity实现分页功能,并结合源码分析其工作原理。 首先,让...
在TabActivity中,我们需要设置TabHost并添加对应的TabSpec(标签规范),每个TabSpec对应一个页面或Activity。 1. **初始化TabHost** - 在布局XML文件中,为TabHost定义一个根元素`<TabHost>`,并设置其ID为`...
在Android开发中,`TabActivity`是早期用来实现底部标签栏切换页面的一种方式。随着Android SDK的更新,`TabActivity`已经被废弃,取而代之的是`Fragment`和`ViewPager`的组合,以及Google推出的`TabLayout`与`...
super.img解包打包工具--lpunpack、lpmake、lpdump linux 下可用。 解压密码:https://modun.blog.csdn.net/ 使用说明:参见我的文章 https://blog.csdn.net/tabactivity/article/details/135969964?