出处:http://blog.sina.com.cn/s/blog_6bec714e0100tv12.html
在使用了一个TabHost控件,下面我们来详细讲解下这个控件以及使用这个控件时,应该注意的一些问题。
使用TabHost有两种方法:
示例一(最基本的)代码:
1)先建一个布局文件:res/layout/tab_demo.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:id="@+id/dd"
</FrameLayout>
2)
//R.layout.main 存放Tab布局
//通过TabHost获得存放Tab标签页内容的FrameLayout
//是否将inflate 拴系到根布局元素上
示例二(最基本的通过Intent来改变Tab里的内容)代码:
1)res/layout/main.xml
<?xml version="1.0" encoding="UTF-8"?>
<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"
</TabHost>
2)
public class MainActivity extends TabActivity {}
问:下面我们来说明一下如何改变每个标签的大小和位置呢?如何设置每个标签的背景颜色或图片呢
变每个标签的大小和位置:
TabWidget mTabWidget = tabHost.getTabWidget();
每个标签的背景颜色或图片:
public TextView createView(String str,int id){
下面是效果
实现底部标签页切换功能:(说明:切换后的每个Activity后只会存在第一次创建的实例)
1)先声明一个TabHost布局:main.xml
<?xml version="1.0" encoding="UTF-8"?><TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent"
</TabHost>
2)buttom.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
</LinearLayout>
3)创建四的Activity类:
MainActivity.java
4)MainActivity.java代码:
public class MainActivity extends TabActivity implements OnClickListener{
}
这样就可以完成底部切换的功能了。
//下面是参考的一些博客网址
http://blog.csdn.net/ch_984326013/article/details/6602602
http://blog.csdn.net/hpoi/article/details/4647767
http://www.eoeandroid.com/thread-1035-1-1.html
出处:http://blog.csdn.net/chaihuasong/article/details/7639100
最近研究了一下Contacts源码,仿照上面自己写了一个TabHostTest程序,现整理如下:
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="match_parent"
- android:layout_height="match_parent">
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TabWidget android:id="@android:id/tabs"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- />
- <FrameLayout android:id="@android:id/tabcontent"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- />
- </LinearLayout>
- </TabHost>
inner.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="match_parent"
- android:layout_height="match_parent">
- <LinearLayout
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- s
- <FrameLayout android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- />
- <TabWidget android:id="@android:id/tabs"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
- </TabHost>
Main.Java (主Activity类):
- package com.android.test;
- import android.app.Activity;
- import android.app.TabActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.provider.CallLog.Calls;
- import android.provider.Contacts.Intents.UI;
- import android.view.Window;
- import android.widget.TabHost;
- public class Main extends TabActivity implements TabHost.OnTabChangeListener {
- private static final int TAB_INDEX_DIALER = 0;
- private static final int TAB_INDEX_CALL_LOG = 1;
- private static final int TAB_INDEX_CONTACTS = 2;
- private static final int TAB_INDEX_FAVORITES = 3;
- private TabHost mTabHost;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- final Intent intent = getIntent();
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.main);
- mTabHost = getTabHost();
- mTabHost.setOnTabChangedListener(this);
- // Setup the tabs
- setupDialerTab();
- setupCallLogTab();
- setupContactsTab();
- setupFavoritesTab();
- setCurrentTab(intent);
- }
- public void onTabChanged(String tabId) {
- Activity activity = getLocalActivityManager().getActivity(tabId);
- if (activity != null) {
- activity.onWindowFocusChanged(true);
- }
- }
- private void setupCallLogTab() {
- // Force the class since overriding tab entries doesn't work
- Intent intent = new Intent("com.android.phone.action.RECENT_CALLS");
- intent.setClass(this, Inner.class);
- mTabHost.addTab(mTabHost.newTabSpec("call_log")
- .setIndicator("通话记录",
- getResources().getDrawable(R.drawable.ic_tab_unselected_recent))
- .setContent(intent));
- }
- private void setupDialerTab() {
- Intent intent = new Intent("com.android.phone.action.TOUCH_DIALER");
- intent.setClass(this, Inner.class);
- mTabHost.addTab(mTabHost.newTabSpec("dialer")
- .setIndicator("拨号",
- getResources().getDrawable(R.drawable.ic_tab_unselected_dialer))
- .setContent(intent));
- }
- private void setupContactsTab() {
- Intent intent = new Intent(UI.LIST_DEFAULT);
- intent.setClass(this, Main.class);
- mTabHost.addTab(mTabHost.newTabSpec("contacts")
- .setIndicator("通讯录",
- getResources().getDrawable(R.drawable.ic_tab_unselected_contacts))
- .setContent(intent));
- }
- private void setupFavoritesTab() {
- Intent intent = new Intent(UI.LIST_STREQUENT_ACTION);
- intent.setClass(this, Inner.class);
- mTabHost.addTab(mTabHost.newTabSpec("favorites")
- .setIndicator("收藏",
- getResources().getDrawable(R.drawable.ic_tab_unselected_starred))
- .setContent(intent));
- }
- /**
- * Sets the current tab based on the intent's request type
- *
- * @param intent Intent that contains information about which tab should be selected
- */
- private void setCurrentTab(Intent intent) {
- // Dismiss menu provided by any children activities
- Activity activity = getLocalActivityManager().
- getActivity(mTabHost.getCurrentTabTag());
- if (activity != null) {
- activity.closeOptionsMenu();
- }
- // Tell the children activities that they should ignore any possible saved
- // state and instead reload their state from the parent's intent
- intent.putExtra("", true);
- // Choose the tab based on the inbound intent
- String componentName = intent.getComponent().getClassName();
- if (getClass().getName().equals(componentName)) {
- if (false) {
- //in a call, show the dialer tab(which allows going back to the call)
- mTabHost.setCurrentTab(TAB_INDEX_DIALER);
- } else if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
- // launched from history (long-press home) --> nothing to change
- } else if (true) {
- // The dialer was explicitly requested
- mTabHost.setCurrentTab(TAB_INDEX_DIALER);
- }
- }
- }
- }
Inner.java类:
- package com.android.test;
- import android.app.TabActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.Window;
- import android.widget.TabHost;
- import android.widget.TabWidget;
- import android.widget.TextView;
- public class Inner extends TabActivity implements TabHost.OnTabChangeListener {
- private static final int TAB_INDEX_ALL = 0;
- private static final int TAB_INDEX_MISSED = 1;
- private static final int TAB_INDEX_OUTGOING = 2;
- private static final int TAB_INDEX_RECEIVED = 3;
- private TabHost mTabHost;
- private TabWidget mTabWidget;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.inner);
- mTabHost = getTabHost();
- mTabHost.setOnTabChangedListener(this);
- setupTabs();
- mTabWidget = mTabHost.getTabWidget();
- mTabWidget.setStripEnabled(false);
- for (int i = 0; i < mTabWidget.getChildCount(); i++) {
- TextView tv = (TextView) mTabWidget.getChildAt(i).findViewById(
- android.R.id.title);
- tv.setTextColor(this.getResources().getColorStateList(
- android.R.color.white));
- tv.setPadding(0, 0, 0,(int) tv.getTextSize());
- tv.setText("Tab" + i);
- mTabWidget.getChildAt(i).getLayoutParams().height =(int ) (3* tv.getTextSize());
- mTabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg);
- }
- }
- public void onTabChanged(String tabId) {
- }
- private void setupTabs() {
- mTabHost.addTab(mTabHost.newTabSpec("all").setIndicator(
- getString(R.string.inner)).setContent(
- new Intent(this, Other.class)));
- mTabHost.addTab(mTabHost.newTabSpec("Missed").setIndicator(
- getString(R.string.inner)).setContent(
- new Intent(this, Other.class)));
- mTabHost.addTab(mTabHost.newTabSpec("Outgoing").setIndicator(
- getString(R.string.inner)).setContent(
- new Intent(this, Other.class)));
- mTabHost.addTab(mTabHost.newTabSpec("Received").setIndicator(
- getString(R.string.inner)).setContent(
- new Intent(this, Other.class)));
- }
- }
效果图如下: