在本教程中,我们将演示如何使用TabLayout
渲染4个选项卡-“ Android”,“ Windows”,“ Apple”和“ BlackBerry”,每个选项卡都包含一个文本视图以显示一条简单消息。
PS此项目在Eclipse 3.7中开发,并通过Android 2.3.3进行了测试。
1.标签图片
将4个标签图像放在“ res / drawable ”文件夹中。 本教程中使用的标签图像未遵循Android图标指南 ,抱歉,我只是不擅长设计:)。
2.用XML标签图像
创建4个XM文件以告诉每个选项卡要使用哪个图像,并将其放入相同的“ res / drawable ”文件夹中。
文件:icon_android_config.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, you should use bg with grey -->
<item android:drawable="@drawable/ic_tab_android"
android:state_selected="true" />
<!-- When not selected, you should use bg with white -->
<item android:drawable="@drawable/ic_tab_android" />
</selector>
文件:icon_apple_config.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
<item android:drawable="@drawable/ic_tab_apple"
android:state_selected="true" />
<!-- When not selected -->
<item android:drawable="@drawable/ic_tab_apple" />
</selector>
文件:icon_blackberry_config.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
<item android:drawable="@drawable/ic_tab_blackberry"
android:state_selected="true" />
<!-- When not selected -->
<item android:drawable="@drawable/ic_tab_blackberry" />
</selector>
文件:icon_windows_config.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
<item android:drawable="@drawable/ic_tab_windows"
android:state_selected="true" />
<!-- When not selected -->
<item android:drawable="@drawable/ic_tab_windows" />
</selector>
3.标签活动
创建4个活动类,并告诉您单击选项卡时要使用的活动。 所有4个类都在做相同的事情,显示一个textview组件。
档案:AndroidActivity.java
package com.mkyong.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class AndroidActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("This is Android tab");
setContentView(textview);
}
}
文件:AppleActivity.java
package com.mkyong.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class AppleActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("This is Apple tab");
setContentView(textview);
}
}
文件:BlackBerryActivity.java
package com.mkyong.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class BlackBerryActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("This is BlackBerry tab");
setContentView(textview);
}
}
文件:WindowsActivity.java
package com.mkyong.android;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class WindowsActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
textview.setText("This is Windows mobile tab");
setContentView(textview);
}
}
4.主要活动
创建入口点,上述4片活性的类与链接TabHost
, TabSpec
等
package com.mkyong.android;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class MainActivity extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources ressources = getResources();
TabHost tabHost = getTabHost();
// Android tab
Intent intentAndroid = new Intent().setClass(this, AndroidActivity.class);
TabSpec tabSpecAndroid = tabHost
.newTabSpec("Android")
.setIndicator("", ressources.getDrawable(R.drawable.icon_android_config))
.setContent(intentAndroid);
// Apple tab
Intent intentApple = new Intent().setClass(this, AppleActivity.class);
TabSpec tabSpecApple = tabHost
.newTabSpec("Apple")
.setIndicator("", ressources.getDrawable(R.drawable.icon_apple_config))
.setContent(intentApple);
// Windows tab
Intent intentWindows = new Intent().setClass(this, WindowsActivity.class);
TabSpec tabSpecWindows = tabHost
.newTabSpec("Windows")
.setIndicator("", ressources.getDrawable(R.drawable.icon_windows_config))
.setContent(intentWindows);
// Blackberry tab
Intent intentBerry = new Intent().setClass(this, BlackBerryActivity.class);
TabSpec tabSpecBerry = tabHost
.newTabSpec("Berry")
.setIndicator("", ressources.getDrawable(R.drawable.icon_blackberry_config))
.setContent(intentBerry);
// add all tabs
tabHost.addTab(tabSpecAndroid);
tabHost.addTab(tabSpecApple);
tabHost.addTab(tabSpecWindows);
tabHost.addTab(tabSpecBerry);
//set Windows tab as default (zero based)
tabHost.setCurrentTab(2);
}
}
5. Android布局文件
文件:res / layout / main.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" />
</LinearLayout>
</TabHost>
6. Android清单
最后,将所有内容放入“ AndroidManifest.xml
”中,定义了4个选项卡活动类,并将“ MainActivity
”设置为入口点。
档案:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mkyong.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity android:name=".AndroidActivity" />
<activity android:name=".WindowsActivity" />
<activity android:name=".AppleActivity" />
<activity android:name=".BlackBerryActivity" />
<activity
android:label="@string/app_name"
android:name=".MainActivity"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
7.演示
默认情况下,Windows选项卡处于选中状态。
点击Android标签。
下载源代码
下载它– Android-TabLayout-Example.zip (23 KB)
参考文献
- Android TabLayout示例
- 标签页布局教程不完整
- Android图标设计指南
- 另一个Android标签布局示例
- Android TabHost Javadoc
- Android TabWidget Javadoc
- Android FrameLayout Javadoc