以Tab的形式显示,在各个平台上都很常见,这个UI 元素的应用很广泛。
TabActivity的用法示例在APIDemo里面都能找到。这里不介绍了,本文主要讲下它的原理和扩展
TabActivity是个比较有意思的东西。TabActivity是继承自ActivityGroup的,Android里面很少涉及ActivityGroup的介绍,借此也可以研究下ActivityGroup.
1. 首先看TabActivity分上下两个部分
下面看Code,可以看到
TabActivity有几个关键的东西
TabActivity -- ActivityGroup
TabHost -- FrameLayout
TabWidget -- LinearLayout
TabActivity ---- TabHost ---- TabWidget+mTabContent(FrameLayout)
TabActivity里面有一个TabHost
TabHost里面有TabWidget+mTabContent
TabWidget就是上面的部分
mTabContent就是下面的部分
2. 先举一个简单的例子,就是显示上面那幅图的例子。每一个Tab就是一个Text
public class Tabs1 extends TabActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost mTabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.tabs1,
mTabHost.getTabContentView(), true);
mTabHost.addTab(mTabHost.newTabSpec("tab1_tag").setIndicator(
"tab1_title").setContent(R.id.tab1)
);
mTabHost.addTab(mTabHost.newTabSpec("tab2_tag").setIndicator(
"tab2_title").setContent(R.id.tab2)
);
mTabHost.addTab(mTabHost.newTabSpec("tab3_tag").setIndicator(
"tab3_title").setContent(R.id.tab3)
);
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:id="@+id/tab1" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:text="@string/tabs_1_tab_1"
android:background="@color/solid_blue" />
<TextView android:id="@+id/tab2" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:text="@string/tabs_1_tab_2"
android:background="@color/solid_green" />
<TextView android:id="@+id/tab3" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:text="@string/tabs_1_tab_3"
android:background="@color/solid_red" />
</FrameLayout>
发现TabHost要讲的东西实在太多。
重点讲下TabWidget和mTabContent吧。
大家都知道TabActivity的显示很灵活。
上面的TabWidget可以是1. String 2. String + Icon 3. 自定义的View
下面的mTabContent可以是1.用resId指定的View(如示例) 2.用TabContentFactory动态生成的View 3.还可以显示指定intent叫起的Activity
它是为什么这么灵活呢?
就是因为在TabHost里用Strategy Pattern-策略模式来实现这两个东西的显示。
如下
/**
* Specifies what you do to create a tab indicator.
*/
private static interface IndicatorStrategy {
/**
* Return the view for the indicator.
*/
View createIndicatorView();
}
/**
* Specifies what you do to manage the tab content.
*/
private static interface ContentStrategy {
/**
* Return the content view. The view should may be cached locally.
*/
View getContentView();
/**
* Perhaps do something when the tab associated with this content has
* been closed (i.e make it invisible, or remove it).
*/
void tabClosed();
}
这里还要提到另外一个东西。
private List<TabSpec> mTabSpecs = new ArrayList<TabSpec>(2);
存着TabSpec就是在addTab()时传入的东西,一个就是一个Tab。
TabSpec里面就有上面的两个Strategy.
在显示的时候,就会从这个List中取TabSpec,然后根据不同的策略来显示内容。
留下一个小问题。
有没有注意当我们去按当前选中的Tab的时候,TabWidget下面的一个长条也会跟选中的Tab一起高亮,好像它们是连在一起的(如下图),这是怎么回事呢?
- 大小: 19.2 KB
- 大小: 19.2 KB
分享到:
相关推荐
NULL 博文链接:https://158067568.iteye.com/blog/941338
Android TabActivity 开发案例,本案例着重介绍用TabActivity 开发安卓分页架构
对初学者理解android 的tabactivity+listview+边框圆角+相机调用 应该有点帮助吧
看到还有些人在使用TabActvity,这个已经被Google废弃了的类,为了大家方便,写了一个能代替TabActivity的东西。说白了也就是对viewpager跟底部菜单进行了一个封装,标准的底部菜单自定义控件已经写好,如果有另外的...
本文实例讲述了Android开发之TabActivity用法。分享给大家供大家参考,具体如下: 一.简介 TabActivity继承自Activity,目的是让同一界面容纳更多的内容。TabActivity实现标签页的功能,通过导航栏对各个页面进行管理...
使用 TabActivity 实现滑动翻页(带动画)和标签置底
TabActivity 之间跳转 传值
android demo,TabActivity的实现源代码。
一个在tab中嵌套tab的简单demo,需要的下吧
运用多页面视图中碎片Fragment 来实现安卓的Tab滑屏
NULL 博文链接:https://ylxy3058.iteye.com/blog/2229306
自定义菜单布局+ActivityGroup+多个Activity的方式实现仿新浪微博底部菜单更新UI) 详解:http://blog.csdn.net/pocoyoshamoo/article/details/24708715
系统自带的TabActivity的效果不甚理想。开发中对TabActivity自定义可能有两种:第一种:改变TAB行的位置,如放到页面下方。第二种:对TabHost图片的自定义
主要介绍了Android应用中使用TabHost组件继承TabActivity的布局方法,文中分别介绍了以Activity和以布局文件进行布局的方式,需要的朋友可以参考下
实现了Tab控件,每个TabActivity用ListView实现
利用Fragment模拟Tabactivity功能。同时也实现了ELong主界面的底部栏的动画切换功能。
1.tabhost+TabActivity实现底部头部导航,本例中为头部导航,不明白可以留言。 2.android屏幕分辨率信息读取方便适配 ; 3. canvas画布画圆弧,扇形,矩形,贝塞尔曲线,六边形等等
TabActivity 实现滑动翻页(动画)
TabActivity探索 TabActivity探索 TabActivity探索 TabActivity探索 TabActivity探索