Tab Layout Tutorials 详解

Google官方例子

程序效果(图):

布局文件 main.xml

<?xml version="1.0" encoding="utf-8"?> <!-- 要创建一个tabbed UI ,你需要使用一个TabHost和一个TabWidget。 TabHost必须是这个布局文件的根节点,它包含两个元素,一个是TabWidget,用来 显示Tab,一个是FrameLayout用来显示Tab的内容 --> <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" android:padding="5dp"> <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"/> </LinearLayout> </TabHost> <!-- 这个布局文件用来显示tabs和给每一个Activity提供导航。 TabHost 需要同时包含TabWidget和Framelayout。我们使用线性布局使得TabWidget和 FrameLayout垂直分布。FrameLayout是用来存放每一个tab的内容。现在是空的是因为 TabHost会自动的将Activity嵌入到里面 --> <!-- 注意到TabWidget和Framelayout元素都是各自有自己的ID,而且要准确的使用这些ID, 这样TabHost才能够找到他们 --> <!-- TabHost 是一个Tabbed窗口视图的容器。这个对象拥有两个子元素。 一个是tab的标签集,用户通过点击它们来选择他想要使用的tab。 另一个是FrameLayout对象,它用来显示这一页上需要显示的内容。 每一个元素通常都是由容器对象控制,而不是通个给子元素设置属性--> <!-- TabWidget 显示一系列表示父tab集合中每一页的tab标签。当用户选择一个tab, 这个对象会向父控件TabHost发送一个消息,告诉它切换到选择那一页。 -->

drawable文件的xml文件

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 当选中时,使用灰色图像 --> <item android:drawable="@drawable/ic_tab_artists_grey" android:state_selected="true"/> <!-- 当未选中时,使用白色图像 --> <item android:drawable="@drawable/ic_tab_artists_white"/> </selector> <!-- 这是一个statelistdrawable,它是一个定义在XML文件当中的drawable对象,用来使用 不同的图像来表示同一个图形对象的不同状态。在本例中, 它应用到一个tab的图标里, 当tab的状态改变了,tab的图标会自动的在我们所定义的这两个图像之间切换-->


三个Activity.java

package com.zeph.android.tablayout.example; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ArtistsActivity extends Activity{ //注意到这个Activity没有使用布局文件。 //仅仅是创建了一个TextView,并为它设置了文本内容。 //用同样的方式建立另外两个Activity,记住要在Manifest清单里面注册这几个Activity @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); TextView textview = new TextView(this); textview.setText("ArtistsActivity"); setContentView(textview); } }package com.zeph.android.tablayout.example; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class SongsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); TextView textview = new TextView(this); textview.setText("SongsActivity"); setContentView(textview); } } package com.zeph.android.tablayout.example; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class AlbumsActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); TextView textview = new TextView(this); textview.setText("AlbumsActivity"); setContentView(textview); } }


TabLayoutActivity.java

package com.zeph.android.tablayout.example; import android.app.TabActivity; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.widget.TabHost; public class TabLayoutActivity extends TabActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取一个Resource对象以获取drawable中的资源 Resources res = getResources(); // 获取TabActivity所需要的TabHost TabHost tabHost = getTabHost(); // TabSpec是TabHost里的一个内部类,可以表示为一个tab,它里面有很多set方法,是用于设置tab的属性和动作 TabHost.TabSpec tabSpec; Intent intent; // Intent对象用于Activity之间的跳转 intent = new Intent().setClass(this, ArtistsActivity.class); /* * public TabHost.TabSpec setContent (Intent intent) * 指定一个加载activity的Intent对象作为选项卡(tab)跳转内容 * public TabHost.TabSpec setIndicator (CharSequence label, Drawable icon) * 为选项卡(tab)指示符指定一个标签和图标 */ tabSpec = tabHost.newTabSpec("Artists").setIndicator("Artists", res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent); tabHost.addTab(tabSpec);//添加tab intent = new Intent().setClass(this, AlbumsActivity.class); tabSpec = tabHost.newTabSpec("Albums").setIndicator("Albums", res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent); tabHost.addTab(tabSpec); intent = new Intent().setClass(this, SongsActivity.class); tabSpec = tabHost.newTabSpec("Songs").setIndicator("Songs", res.getDrawable(R.drawable.ic_tab_artists)).setContent(intent); tabHost.addTab(tabSpec); tabHost.setCurrentTab(2); //注意这里从头到尾都没有出现TabWidget的对象的引用,这是因为TabWidget是TabHost的子元素, //添加到TabHost里的tab会自动的添加到TabWidget中。 } }



在三个tab中,我使用的同一个icon。没有找到比Google官方好的,就用它的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值