[笔记]android UI ------ Tab Layout
选项卡布局
为了创建一个选项卡的UI,你需要使用一个TabHost和一个TabWidget,TabHost必须是布局文件的根节点,它包含了为了显示选项卡的TabWidget和一个用于显示选项内容的FrameLayout
你可以用一或两种方法实现你的选项卡内容:在用一个Activity中用选项卡来在视图之间切换,或者用用选项卡来改变所有的分离的Activity。你根据你的需求来使用你想在程序中的方法,但是如果每个选项卡提供一个独特的用户Activity,那么为每个选项卡实现独立的Activity是有意义的,所有你最好在你的离散群里管理应用程序,要好过使用大量的应用程序和布局文件。
在这个例子中,你可以创建一个为每个单独的Activity创建选项卡来创建一个选项卡UI
1、开始一个新的工程,叫做HelloTabWidget
2、第一,创建三个独立的Activity程序在你的工程中:ArtistsActivity,AlbumsActivity,和SongsActivity,他们每个代表一个单独的选项卡,现在用TextView来没每个程序显示一个简单的信息,比如:
1 package org.hualang.tabwidget; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class AlbumsActivity extends Activity { 8 public void onCreate(Bundle savedInstanceState) 9 { 10 super.onCreate(savedInstanceState); 11 TextView textview = new TextView(this); 12 textview.setText("This is the Albums tab"); 13 setContentView(textview); 14 } 15 }
1 package org.hualang.tabwidget; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class SongsActivity extends Activity { 8 public void onCreate(Bundle savedInstanceState) 9 { 10 super.onCreate(savedInstanceState); 11 TextView textview = new TextView(this); 12 textview.setText("This is the Songs tab"); 13 setContentView(textview); 14 } 15 16 }
1 package org.hualang.tabwidget; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.TextView; 6 7 public class ArtistsActivity extends Activity { 8 /** Called when the activity is first created. */ 9 @Override 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 TextView textview = new TextView(this); 13 textview.setText("This is the Artists tab"); 14 setContentView(textview); 15 } 16 }
注意这个例子中不需要布局文件,只需要创建一个TextView,并且为文本赋值即可。重复创建三个类似的Activity,并且要在AndroidManifest.xml文件中注册,否则报错
3、你需要为每个选项卡设置一个icon,每个icon,你可以有两个版本,一个是当选项卡被选中的时候,另一个是当选项卡未被选中的时候。一般设计来说,建议当被选中的时候用灰色,的那个未被选中的时候用白色,比如
你可以拷贝这两张图片来做实验用
现在创建一个状态图片列表来制定每个选项卡不同状态的时候所指定的图片
①把图片存在res/drawable/目录下
②在res/drawable/目录下创建一个名为ic_tab_artists.xml文件,并且插入如下信息
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <!-- When selected,use grey --> 4 <item android:drawable="@drawable/ic_tab_artists_grey" 5 android:state_selected="true"/> 6 <!-- When not selected ,use white --> 7 <item android:drawable="@drawable/ic_tab_artists_white"/> 8 </selector>
上面这个文件,当选项卡的状态改变的时候,选项卡就会自动的在两种已经定义的图片之间切换
4、打开res/layout/main.xml文件并且插入如下信息
1 <?xml version="1.0" encoding="utf-8"?> 2 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@android:id/tabhost" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent"> 6 <LinearLayout 7 android:orientation="vertical" 8 android:layout_width="fill_parent" 9 android:layout_height="fill_parent" 10 android:padding="5dp"> 11 <TabWidget 12 android:id="@android:id/tabs" 13 android:layout_width="fill_parent" 14 android:layout_height="wrap_content" /> 15 <FrameLayout 16 android:id="@android:id/tabcontent" 17 android:layout_width="fill_parent" 18 android:layout_height="fill_parent" 19 android:padding="5dp" /> 20 </LinearLayout> 21 </TabHost>
5、编写HelloTabWidget。继承TabWidget
1 package org.hualang.tabwidget; 2 3 import android.app.TabActivity; 4 import android.content.Intent; 5 import android.content.res.Resources; 6 import android.os.Bundle; 7 import android.widget.TabHost; 8 9 public class HelloTabWidget extends TabActivity { 10 public void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 14 Resources res = getResources(); // Resource object to get Drawables 15 TabHost tabHost = getTabHost(); // The activity TabHost 16 TabHost.TabSpec spec; // Resusable TabSpec for each tab 17 Intent intent; // Reusable Intent for each tab 18 19 // Create an Intent to launch an Activity for the tab (to be reused) 20 intent = new Intent().setClass(this, ArtistsActivity.class); 21 22 // Initialize a TabSpec for each tab and add it to the TabHost 23 spec = tabHost.newTabSpec("artists").setIndicator("Artists", 24 res.getDrawable(R.drawable.ic_tab_drawable)) 25 .setContent(intent); 26 tabHost.addTab(spec); 27 28 // Do the same for the other tabs 29 intent = new Intent().setClass(this, AlbumsActivity.class); 30 spec = tabHost.newTabSpec("albums").setIndicator("Albums", 31 res.getDrawable(R.drawable.ic_tab_drawable)) 32 .setContent(intent); 33 tabHost.addTab(spec); 34 35 intent = new Intent().setClass(this, SongsActivity.class); 36 spec = tabHost.newTabSpec("songs").setIndicator("Songs", 37 res.getDrawable(R.drawable.ic_tab_drawable)) 38 .setContent(intent); 39 tabHost.addTab(spec); 40 41 tabHost.setCurrentTab(2); 42 } 43 44 45 }
结果: