之前在
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。
分享到:
相关推荐
总结来说,Android的Tab布局通过TabHost组件实现,结合TabSpec、TabWidget和FrameLayout可以创建出多Tab的界面。开发者可以选择用Activity或Fragment来承载每个Tab的内容,根据实际需求选择最适合的方式。在实际项目...
总结来说,Android中的Tab切换可以通过多种方式实现,从传统的TabHost到现代的TabLayout+ViewPager。开发者可以根据项目需求选择合适的方法,并利用动画效果提升交互体验。 DWinterTabDemo.zip可能是一个实际的示例...
总结来说,Android中实现多个Tab的切换有多种方式,如传统的TabHost,或者是现代的TabLayout+ViewPager组合。选择哪种方式取决于项目需求和对兼容性的考虑。无论采用何种方法,理解并熟练掌握这些技术对于Android...
总结来说,创建一个Android纵向的Tab布局需要自定义TabLayout的样式和行为,包括设置Tab的垂直对齐、滚动模式以及处理点击事件。通过与ViewPager结合使用,可以轻松地在多个内容视图之间切换。记住,始终关注用户...
在Android中,我们可以使用`ViewPager`配合`TabLayout`或者自定义的Tab控件来完成这一任务。在给定的描述和代码片段中,开发者选择了一种自定义的实现方式,使用`PagerSlidingTabStrip`库来创建选项卡切换效果。 `...
总结: 通过以上步骤,我们可以实现一个类似新浪微博底部Tab布局的应用。使用Android的TabHost组件,我们可以方便地创建多Tab界面,并通过设置不同的Intent来切换不同的Activity。同时,通过自定义Tab的样式,可以...
总结起来,Android中实现Tab布局的方法多种多样,从早期的TabHost到现代的TabLayout,开发者可以根据项目的兼容性需求和设计风格选择合适的方式。随着Android框架的发展,Tab的实现方式也在不断进化,提供更优质的...
### Android中的Tab与TabHost详解 #### 一、Tab与TabHost概述 在Android开发过程中,经常需要设计具有标签切换功能的应用界面。其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出...
在Android应用开发中,创建一个具有Tab切换功能的主界面是非常常见的需求,这可以提供多面板的用户体验。本文将深入探讨如何使用Fragment、TabPageIndicator和ViewPager来实现这样的Tab类型主界面,参考的代码示例...
总结,Android的Tab例子是一个实用的功能,它能够帮助开发者创建具有多标签的用户界面。通过TabLayout和ViewPager的组合,我们可以轻松实现动态添加和管理Tab,同时还能根据需求进行高度定制。了解并熟练运用这些...
总结来说,"Android Tab 栏居中滚动"涉及到`TabLayout`与`ViewPager`的结合使用,自定义Tab视图和滑动事件的处理,以及可能的日期选择功能的实现。通过巧妙地组合和扩展这些组件,开发者可以构建出具有专业视觉效果...
总结起来,Android中的Tab标签使用涉及到`TabLayout`、`ViewPager`和`Fragment`的组合,以及自定义适配器和事件监听。通过合理的设计和编程,可以创建出具有滑动效果的底部或顶部标签,为用户提供流畅的多页面导航...
总结起来,"android tab效果"主要涉及使用TabHost或ViewPager来构建一个多标签页的用户界面。在较旧的Android版本中,如2.3,TabHost是标准方法,而随着版本更新,ViewPager和Fragment成为了更推荐的选择,提供了更...
这篇博客文章“android总结之TabHost”深入探讨了如何在Android应用中使用TabHost进行界面设计。TabHost提供了在同一个屏幕上展示多个功能区域的能力,使得用户可以方便地切换不同内容。 首先,我们需要理解TabHost...
总结来说,Android的TabHost组件提供了一种方便的方式来组织应用的多个功能模块,用户可以通过标签页轻松切换。在实际开发中,我们可以根据需求自定义标签页的样式、内容和交互,为用户提供更友好的界面体验。需要...
总结起来,Android的TabHost是一个强大的工具,用于构建带有多个Tab的用户界面。通过设置TabWidget和FrameLayout,以及使用TabSpec来管理每个Tab的内容,我们可以轻松地创建出功能丰富的多视图应用。尽管现代Android...
使用`android:background`属性 按钮的点击变色通常通过设置`Button`的背景来实现,同样可以使用`ColorStateList`。创建一个XML资源文件(如`button_colors.xml`),并在`Button`的`android:background`属性中引用...
总结:TabHost在Android应用中提供了灵活的多标签页展示方式,可以通过XML布局或者编程方式实现。XML布局方式简洁直观,适合静态内容;而编程方式更适用于动态生成或复杂交互的场景。理解这两种方法对于创建具有多...
总结起来,Android Tab Layout是构建多视图应用程序的重要工具,它提供了简洁且易于使用的界面。同时,DFA的概念可以在处理用户输入和优化资源管理等方面发挥作用,提升应用的性能和用户体验。通过结合这两者,...
总结来说,自定义Android的TabHost可以使应用的界面更加个性化,同时通过合理利用Fragment可以优化性能。在实际开发中,还可以根据需求调整选项卡的行为,比如添加滑动效果、动画等。通过掌握这些技巧,你可以在...