`
kevinlynx
  • 浏览: 82960 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Android: Tab的使用总结

阅读更多
之前在t.sina.com.cn/kevinlynx陆续贴了些android开发涉及到的一些code snippets,主要目的是记录,供以后需要的时候查阅方便。但是因为miniblog的字数限制,在记录较多信息的时候还是有诸多不便。so, i'm here.

Tab view算是我接触android平台第二个比较迷惑的地方(第一个是ListView的adapter)。在百度了一些别人的使用心得/总结后,依然发现对tab view的使用存在很多疑问。包括ApiDemo里的例子以及其他一些例子代码。就目前而言我依然存在部分疑点,不过,就单纯的使用而言,倒是足够了。

Tab view通过TabHost来管理tab page:
A TabHost is(copyed from official reference):
Container for a tabbed window view. This object holds two children: a set of tab labels that the user clicks to select a specific tab, and a FrameLayout object that displays the contents of that page.

使用TabHost必然涉及到TabActivity:
class TabSample extends TabActivity {
    protected void onCreate( Bundle savedInstanceState ) {
         TabHost tabHost = getTabHost();
    }
};

取得TabHost 更多地是为tab添加page,即标签页。

此外,android用TabSpec来表示一个标签页,可以通过tabHost.newTabSpec来创建,创建的时候一般会立即设置各种属性,如下代码:

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .setContent(R.id.view1));



添加标签页的方式就多了,方式太多正是迷惑人的地方。就我目前所查阅的资料来看,有3个方式添加子标签(添加子标签即为tab setContent):

1、如ApiDemo Tabs1.java所示,使用layout (declared in xml)来作为内容

LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true);

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1")
                .setContent(R.id.view1));

这里的inflate实际上我不太理解,好像是将tabs1这个layout实力化为java对象,并作为tabHost.getTabContentView()的子views。inflat相关机制还没去研究。

2、如ApiDemo Tabs2.java所示,使用TabHost.TabContentFactory来设置标签页的内容:

public class Tabs2 extends TabActivity implements TabHost.TabContentFactory {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final TabHost tabHost = getTabHost();
        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("tab1", getResources().getDrawable(R.drawable.star_big_on))
                .setContent(this));
            ....
 public View createTabContent(String tag) {
        final TextView tv = new TextView(this);
        tv.setText("Content for tab with tag " + tag);
        return tv;
    }


3、我想这才是我目前所需要的方式,直接嵌入其他的Activity进来。通过Intent的方式,如ApiDemo Tabs3.java所示:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final TabHost tabHost = getTabHost();

        tabHost.addTab(tabHost.newTabSpec("tab1")
                .setIndicator("list")
                .setContent(new Intent(this, List1.class)));
         ....



以上几种方式中,只有方式1需要使用一个layout(我的意思是xml配置的)。在我查看的另一份代码中(UROP1,一个闹钟程序),他使用了第三种方式,但却在开头setContentView。在我注释掉这行代码时,效果依然没变。包括在网上的很多其他文章,都会使用setContentView,但看起来有点多余。这也是让我迷惑的地方。

综合来说,三种方式,都不需要setContentView,方式1需要inflat一份layout,其他2种则不需要。

BTW,Javaeye的blog编辑功能还不错。:D

1.2.2011 update

默认设置下,TabActivity中的content是activity的话,第一次切换会触发onCreate,切换标签页
不会导致当前activity onStop/onDestroy,只有当退出TabActivity时,才触发。

标签页切换会导致子activity onPause,只有当前处于前台的activity,才会接收到
onBackPressed,整个TabActivity退出时,只会触发一次finishedFromChild。
分享到:
评论
1 楼 jowett 2011-08-12  
尝试了一把,不使用tabhost,单独使用LayoutInflater.from(this).inflate(R.layout.xx, learlayout, true);
可以把layout.xx的内容作为learlayout的child,并显示出来。也就是说这个函数其实和tabhost的实现没有什么具体的关系。

实际上使用了
LayoutInflater.from(this).inflate(R.layout.tabs1, tabHost.getTabContentView(), true); 
以后,相当于把tabs1下面所有的内容放在tabWidget下面作为child,但是因为默认第一个tab页会被set focus,所以页面马上又变为tab1所指向的第一个View1了

相关推荐

    android的tab布局简单例子

    总结来说,Android的Tab布局通过TabHost组件实现,结合TabSpec、TabWidget和FrameLayout可以创建出多Tab的界面。开发者可以选择用Activity或Fragment来承载每个Tab的内容,根据实际需求选择最适合的方式。在实际项目...

    android tab 切换 整理

    总结来说,Android中的Tab切换可以通过多种方式实现,从传统的TabHost到现代的TabLayout+ViewPager。开发者可以根据项目需求选择合适的方法,并利用动画效果提升交互体验。 DWinterTabDemo.zip可能是一个实际的示例...

    android 多个Tab的切换

    总结来说,Android中实现多个Tab的切换有多种方式,如传统的TabHost,或者是现代的TabLayout+ViewPager组合。选择哪种方式取决于项目需求和对兼容性的考虑。无论采用何种方法,理解并熟练掌握这些技术对于Android...

    android纵向的tab

    总结来说,创建一个Android纵向的Tab布局需要自定义TabLayout的样式和行为,包括设置Tab的垂直对齐、滚动模式以及处理点击事件。通过与ViewPager结合使用,可以轻松地在多个内容视图之间切换。记住,始终关注用户...

    Android多个TAB选项卡切换效果

    在Android中,我们可以使用`ViewPager`配合`TabLayout`或者自定义的Tab控件来完成这一任务。在给定的描述和代码片段中,开发者选择了一种自定义的实现方式,使用`PagerSlidingTabStrip`库来创建选项卡切换效果。 `...

    android底部tab布局

    总结: 通过以上步骤,我们可以实现一个类似新浪微博底部Tab布局的应用。使用Android的TabHost组件,我们可以方便地创建多Tab界面,并通过设置不同的Intent来切换不同的Activity。同时,通过自定义Tab的样式,可以...

    Android的Tab方法

    总结起来,Android中实现Tab布局的方法多种多样,从早期的TabHost到现代的TabLayout,开发者可以根据项目的兼容性需求和设计风格选择合适的方式。随着Android框架的发展,Tab的实现方式也在不断进化,提供更优质的...

    史上最全的Android的Tab与TabHost.txt

    ### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...

    Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    在Android应用开发中,创建一个具有Tab切换功能的主界面是非常常见的需求,这可以提供多面板的用户体验。本文将深入探讨如何使用Fragment、TabPageIndicator和ViewPager来实现这样的Tab类型主界面,参考的代码示例...

    android的tab例子

    总结,Android的Tab例子是一个实用的功能,它能够帮助开发者创建具有多标签的用户界面。通过TabLayout和ViewPager的组合,我们可以轻松实现动态添加和管理Tab,同时还能根据需求进行高度定制。了解并熟练运用这些...

    Android tab 栏居中滚动

    总结来说,"Android Tab 栏居中滚动"涉及到`TabLayout`与`ViewPager`的结合使用,自定义Tab视图和滑动事件的处理,以及可能的日期选择功能的实现。通过巧妙地组合和扩展这些组件,开发者可以构建出具有专业视觉效果...

    android Tab标签的使用

    总结起来,Android中的Tab标签使用涉及到`TabLayout`、`ViewPager`和`Fragment`的组合,以及自定义适配器和事件监听。通过合理的设计和编程,可以创建出具有滑动效果的底部或顶部标签,为用户提供流畅的多页面导航...

    android tab效果

    总结起来,"android tab效果"主要涉及使用TabHost或ViewPager来构建一个多标签页的用户界面。在较旧的Android版本中,如2.3,TabHost是标准方法,而随着版本更新,ViewPager和Fragment成为了更推荐的选择,提供了更...

    android总结之TabHost

    这篇博客文章“android总结之TabHost”深入探讨了如何在Android应用中使用TabHost进行界面设计。TabHost提供了在同一个屏幕上展示多个功能区域的能力,使得用户可以方便地切换不同内容。 首先,我们需要理解TabHost...

    Android TabHost组件使用方法详解

    总结来说,Android的TabHost组件提供了一种方便的方式来组织应用的多个功能模块,用户可以通过标签页轻松切换。在实际开发中,我们可以根据需求自定义标签页的样式、内容和交互,为用户提供更友好的界面体验。需要...

    android TabHost(标签)的使用

    总结起来,Android的TabHost是一个强大的工具,用于构建带有多个Tab的用户界面。通过设置TabWidget和FrameLayout,以及使用TabSpec来管理每个Tab的内容,我们可以轻松地创建出功能丰富的多视图应用。尽管现代Android...

    android 点击变色字体或按钮

    使用`android:background`属性 按钮的点击变色通常通过设置`Button`的背景来实现,同样可以使用`ColorStateList`。创建一个XML资源文件(如`button_colors.xml`),并在`Button`的`android:background`属性中引用...

    TabHost的两种使用方式

    总结:TabHost在Android应用中提供了灵活的多标签页展示方式,可以通过XML布局或者编程方式实现。XML布局方式简洁直观,适合静态内容;而编程方式更适用于动态生成或复杂交互的场景。理解这两种方法对于创建具有多...

    android tab layout 实例

    总结起来,Android Tab Layout是构建多视图应用程序的重要工具,它提供了简洁且易于使用的界面。同时,DFA的概念可以在处理用户输入和优化资源管理等方面发挥作用,提升应用的性能和用户体验。通过结合这两者,...

    android TabHost自定义选项卡

    总结来说,自定义Android的TabHost可以使应用的界面更加个性化,同时通过合理利用Fragment可以优化性能。在实际开发中,还可以根据需求调整选项卡的行为,比如添加滑动效果、动画等。通过掌握这些技巧,你可以在...

Global site tag (gtag.js) - Google Analytics