在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录。下面是Tag的结构。
TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout。TabWidget就是每个tab的标签,FrameLayout则是tab内容。
- 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost
- TabWidget必须设置android:id为@android:id/tabs
- FrameLayout需要设置android:id为@android:id/tabcontent
例子一:基本的Tag例子
1)Android XML文件
<?xml version="1.0" encoding="utf-8"?>
<TabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/c92_tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<AnalogClock android:id="@+id/c92_tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true" />
<Button android:id="@+id/c92_tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="A semi-random Button" />
</FrameLayout>
</LinearLayout>
</TabHost>
2)源代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chapter_9_test2);
//步骤1:获得TabHost的对象,并进行初始化setup()
TabHost
tabs = (TabHost)findViewById(R.id.c92_tabhost);
tabs.setup();
//步骤2:通过TabHost.TabSpec增加tab的一页,通过setContent()增加内容,通过setIndicator增加页的标签
/*(1)增加第1页*/
TabHost.TabSpec
spec = tabs.newTabSpec("Tag1");
spec.setContent
(R.id.c92_tab1);
spec.setIndicator
("Clock");
tabs.addTab
(spec);
/*(2)增加第2页*/
spec = tabs.newTabSpec("Tag2");
spec.setContent(R.id.c92_tab2);
spec.setIndicator("Button");
tabs.addTab(spec);
//步骤3:可通过setCurrentTab(index)指定显示的页,从0开始计算。
tabs.setCurrentTab
(1);
}
例子二:设置标签
标签设置除了上面给出文本外,还可以给出widget,例如:
Button b = new Button(this);
b.setText("标签");
spec.setIndicator(b);
这也是work的,当然设置button是很无聊的,通常我们希望是图片,如下面三图:
1)我们在标签上加一个图标,如左图。这个图片存在于drawable/目录下:
Resources res = getResources();
spec.setIndicator("Button",res.getDrawable(R.drawable.star_logo));
2)我们在标签上家一个图片,当用户选择该页是为某一图标,不选择时为另一图标。如上中图和右图所示。我们在drawable目录项目有相关的两个图片文件。会议在Android学习笔记(六):xml和widget
中的View,我们建立一个XML文件,描述:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 这是顺序执行的,如果状态是selected,则为android_focused图标,如果不是下一步,采用android_normal图标-->
<item
android:drawable="@drawable/android_focused
"
android:state_selected
="true" />
<item
android:drawable="@drawable/android_normal"
/>
</selector>
这个文件我们取名为chapter_9_tutorial3_ic.xml,为了方便管理,这次我们没有将之放置在layout目录下,而是方式在drawable目录下。源代码如下:
Resources res = getResources();
spec.setIndicator("Button",res.getDrawable(R.drawable.chapter_9_tutorial3_ic));
例子三:动态添加Tab页
在某些情况下,我们需要动态添加Tab页,可通过TabContentFactory来实现。下面的例子,我们点击Tab也中的button,将新增一个tab页。
Button button = (Button)findViewById(R.id.c92_tabhost);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
TabHost.TabSpec spec = tabs.newTabSpec
("tag1");
spec.setContent(new TabHost.TabContentFactory
() {
/*createTabContent将返回
View,这里我们简单用一个模拟时钟*/
public View createTabContent
(String tag) {
return new AnalogClock(Chapter9Test3.this);
}
});
spec.setIndicator("Clock");
tabs.addTab(spec);
}
});
例子四:将一个Activity加入到Tab页
在Android SDK的Tutorial中给出了一个例子,采用setContent(Intent intent)的方式在content中传递一个Activity。这个例子费了我比长的时间,因为一开始运行时都报错。因此在写的时候,注意下面两个问题:
- 采用setContent(Intent intent)之前,必须对TabHost进行setup (LocalActivityManager activityGroup),因为在调起acivity时需要activityGroup,如果我们继承TabActivity,则由TabAcitivty自动完成,鉴于我们目前对LocalActivityManager尚不了解,简单地可以直接继承TabActivity
- Activity不能是内部类,Activity必须在AndroidManifest中进行注册
对于对第1点,我们的XML文件如下:
<?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:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
</FrameLayout>
</LinearLayout>
</TabHost>
对于第2点要求,我们可以直接使用之前我们创建过的Activity,代码如下
public class Chapter9Tutorial3 extends TabActivity
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chapter_9_tutorial3);
TabHost tabs = getTabHost();
TabHost.TabSpec spec = null;
//通过Intent,将activity导入,
对于intent,这个类不能
是内部类,这个类必须在AndroidManifest中注册的类
Intent intent = new Intent();
intent.setClass(this, Chapter9Tutorial2.class);
spec = tabs.newTabSpec("Tag1");
spec.setIndicator("Intent");
spec.setContent(intent);
tabs.addTab(spec);
. .. ...
}
}
相关链接:我的Andriod开发相关文章
分享到:
相关推荐
【Android多页显示与Tag的使用】 在Android开发中,多页显示通常涉及到Tab界面,这是一种用户友好的设计,使得用户能够轻松地在不同的功能或内容之间切换。Tag的使用在此过程中扮演着重要的角色,它提供了对各个...
【Android学习笔记(二三):多页显示-Flipper的使用】 在Android开发中,展示多页内容是常见的需求,通常我们可以通过Tab布局来实现,但除此之外,还有一个组件可以帮助我们实现这一功能,那就是`ViewFlipper`。`...
《Android 群英传》读书笔记:自定义 View ---- 音频条形图 博客地址:http://blog.csdn.net/like_program/article/details/53352899
学习笔记请看我写的文章: Java开发 - 尚硅谷JavaWeb学习笔记 - Part1: https://blog.csdn.net/qq_63317769/article/details/139883728 Java开发 - 尚硅谷JavaWeb学习笔记 - Part2: Java开发 - 尚硅谷JavaWeb...
在本篇Android学习笔记中,我们将探讨如何使用SlidingDrawer实现多页显示,并理解其工作原理和相关属性。 首先,SlidingDrawer通常用于在主界面下方或上方滑出额外的内容,例如菜单、设置或附加信息。它有两个主要...
这篇“Android学习笔记(二):安装环境”详细介绍了如何准备必要的软件和工具,让我们一起深入探讨这些步骤。 1. **Java Development Kit (JDK)**: JDK是Java开发的基础,包括了Java编译器、调试器和Java运行环境...
【Linux学习笔记】这篇超全总结涵盖了Linux操作系统的基础知识,特别是关于命令行的使用和快捷键,以及一些桌面环境下的快捷操作。以下是笔记中的主要内容: 1. **LINUX常用操作命令**: - `clear`:清空终端屏幕...
在Android学习笔记(十二)中,我们将探讨Spinner的基本实现方法。首先,我们需要在XML布局文件中定义Spinner。以下是一个简单的示例: ```xml …> <TextView android:id="@+id/spinner_label" … /> <Spinner ...
例如,我们可以通过更改ArrayAdapter的构造函数第二个参数来自定义视图,或者使用其他类型的Adapter,如CursorAdapter或BaseAdapter。此外,我们还可以直接通过`getListView()`方法获取ListView对象,以设置更多的...
本篇笔记主要关注在Activity中如何使用TableLayout和ScrollView这两种布局组件。 TableLayout是Android中的一个布局容器,它允许开发者按照表格的形式组织界面元素。TableLayout由TableRow组成,每个TableRow则包含...
这篇【Android学习笔记(四):不使用IDE采用命令行】介绍了如何在命令行环境下建立项目、编写代码、编译和安装应用程序。 1. **建立项目** 使用Android SDK中的`tools`目录下的`android`命令来创建一个新的...
语言程序设计资料:ExtJs学习笔记-2积分.doc
Android学习笔记(二)android studio基本控件及布局(实现图片查看器) Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像) Android学习笔记(四)Android 中Activity页面的...
在“Android 学习笔记(十三):Activity-GridView”这篇笔记中,主要讲解了如何在Activity中使用GridView以及如何自定义适配器来实现特定的UI效果。以下是关于这个主题的详细知识点: 1. **GridView基本概念**: ...
Android学习笔记是Android开发者的必读书籍,书中涵盖了Android系统架构、Activity、Intent、资源管理等多方面的知识。本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android...
Java学习笔记包含JVM、spring、源码分析、多线程、offer题解、设计模式、面试宝典.zip Java学习笔记,内容包括JVM,spring,hashMap实现源码分析,多线程,剑指offer题解,设计模式。然后根据面试的重点,又将很多从...
Android学习笔记-采用ListView实现数据列表显示-以及各种适配器使用-和如何写.pdf
分布式,xxl-sso-master-很好用的学习笔记