展会信息港展会大全

安卓Android的TabActivity/TabHost实现每个Tab一个Activity(图标+文字)
来源:互联网   发布日期:2015-10-03 11:13:09   浏览:1047次  

导读:根据网上资料,写了一个通用的类似模板的类MyTabActivity,实现一个图标Icon+文字Label的TabActivity,应用的类只要把Icon和Label加上去,对应每个Activi...

根据网上资料,写了一个通用的类似模板的类MyTabActivity,实现一个图标Icon+文字Label的TabActivity,应用的类只要把Icon和Label加上去,对应每个Activity,就可以建立一个TabActivity了。

1.模板类MyTabActivity.java(可以重用)

[java]

package amao.callbye;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.app.TabActivity;

import android.content.Context;

import android.content.Intent;

import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.util.Log;

import android.view.Gravity;

import android.view.Window;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TabHost;

import android.widget.TabHost.OnTabChangeListener;

import android.widget.TabHost.TabSpec;

import android.widget.TextView;

/**

* Abstract TabActivity with icon+text TabSpec support for each Activity

* Sub class need set "layout" and "selectDrawable"(tab selected background image) in constructor

* And implement getMyTabList() to add tab configuration

*

* @author Anderson Mao, 2012-05-01

*/

public abstract class MyTabActivity extends TabActivity {

private static String TAG_NAME = MyTabActivity.class.getSimpleName();

private TabHost tabHost;

private int tabLayout;

private int selectDrawable;

private Drawable selectBackground;

private int textColor = Color.GRAY;

private int selectTextColor = Color.LTGRAY;

private Map<String, TabView> tabViewMap = new HashMap<String, TabView>();

private String tabViewTagPrev=null;

public abstract List<MyTab> getMyTabList();

public MyTabActivity(int tabLayout, int selectDrawable){

this.tabLayout = tabLayout;

this.selectDrawable = selectDrawable;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(tabLayout);

tabHost = getTabHost(); // Get TabHost after setContentView()

//

initTabHost();

}

private void initTabHost(){

selectBackground = this.getResources().getDrawable(selectDrawable);

int index = 0;

// Create TabSpec for each MyTab. The first tab is the default

StringdefaultTag = null;

TabView defaultTabView = null;

List<MyTab> myTabList = getMyTabList();

for(MyTab myTab: myTabList){

index++;

String tag = Integer.toString(index);

TabView view = new TabView(this, myTab.icon, myTab.text);

TabSpec tabSpec = tabHost.newTabSpec(tag)

.setIndicator(view)

.setContent(new Intent(this, myTab.activity))

;

tabViewMap.put(tag, view);

tabHost.addTab(tabSpec);

if(defaultTag == null){

defaultTag = tag;

defaultTabView = view;

}

}

// Listener on tab change

tabHost.setOnTabChangedListener( new OnTabChangeListener(){

@Override

public void onTabChanged(String tabId){

Log.d(TAG_NAME,"change tab: id="+tabId+", prevId="+tabViewTagPrev);

if(tabViewTagPrev!=null){

// Reset prev tab

TabView tvPrev = tabViewMap.get(tabViewTagPrev);

if(tvPrev!=null){

tvPrev.setBackgroundDrawable(null);

tvPrev.textView.setTextColor(textColor);

}

}

// Set current selected tab

TabView tv = tabViewMap.get(tabId);

if(tv!=null){

tv.setBackgroundDrawable(selectBackground);

tv.textView.setTextColor(selectTextColor);

}

//

tabViewTagPrev = tabId;

}

});

// Set default tab

if(defaultTag != null){

defaultTabView.setBackgroundDrawable(selectBackground);

defaultTabView.textView.setTextColor(selectTextColor);

tabViewTagPrev = defaultTag;

}

}

/**

* Layout for each TabSpec

*/

private class TabView extends LinearLayout {

private ImageView imageView ;

private TextView textView;

public TabView(Context c, int icon, String text) {

super(c);

setOrientation(VERTICAL);

setGravity(Gravity.CENTER);

imageView = new ImageView(c);

imageView.setImageDrawable(this.getResources().getDrawable(icon));

imageView.setBackgroundColor(Color.TRANSPARENT);

addView(imageView);

textView = new TextView(c);

textView.setText(text);

textView.setTextColor(textColor);

textView.setGravity(Gravity.CENTER);

addView(textView);

}

}

/**

* Options for each TabSpec. Icon + Text + Activity

*/

public class MyTab{

private int icon;

private String text;

private Class<? extends Activity> activity;

public MyTab(int icon, String text, Class<? extends Activity> activity){

this.icon = icon;

this.text = text;

this.activity = activity;

}

}

}

2.实际应用类CallbyeTabActivity.java(使用MyTabActivity)

[java]

package amao.callbye;

import java.util.ArrayList;

import java.util.List;

/**

* TabActivity by configuration

* @see MyTabActivity.java

*

* @author Anderson Mao, 2012-05-01

*/

public class CallbyeTabActivity extends MyTabActivity {

public CallbyeTabActivity(){

super(R.layout.tab, R.drawable.icon_tab_select);

}

@Override

public List<MyTab> getMyTabList(){

List<MyTab> myTabList = new ArrayList<MyTab>();

//

myTabList.add(new MyTab(R.drawable.icon_home, getString(R.string.tab_home), CallbyeActivity.class) );

myTabList.add(new MyTab(R.drawable.icon_setting, getString(R.string.tab_setting), SettingActivity.class) );

myTabList.add(new MyTab(R.drawable.icon_help, getString(R.string.tab_help), HelpActivity.class) );

myTabList.add(new MyTab(R.drawable.icon_history, getString(R.string.tab_info), InfoActivity.class) );

//

return myTabList;

}

}

3.Layout (tab.xml)

[html]

<?xml version="1.0" encoding="utf-8"?>

<TabHost android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:id="@android:id/tabhost"

xmlns:android="http://schemas.android.com/apk/res/android"

>

<RelativeLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:padding="0dip"

>

<FrameLayout

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:id="@android:id/tabcontent"

>

</FrameLayout>

<TabWidgetwww.2cto.com

android:layout_width="fill_parent"

android:layout_height="50dip"

android:id="@android:id/tabs"

android:background= "@android:color/black"

android:layout_alignBottom = "@android:id/tabcontent"

/>

</RelativeLayout>

</TabHost>

作者:andersonmao

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港