打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android TabHost 标签放在底部+Header

转载请注明:http://www.cnblogs.com/soloho/archive/2012/03/17/2403232.html

附件下载链接:api.zip

网上已经有很多关于如何将TabHost的标签放在底部,这里就不说了

主要是把这些都做成框架,只需要提供图片和文字就可以实现这样的效果。

直接上图,代码解释的很清楚

程序的图片借用新浪微博,如有不妥,请告知



代码:

package com.api.example.app;


import java.util.ArrayList;

import java.util.List;


import android.content.Intent;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.TabWidget;

import android.widget.TextView;


import com.api.R;

import com.api.TabHostActivity;


/**

 * <p>整个流程就像使用ListView自定BaseAdapter一样</p>

 * 

 * <p>如果要自定义TabHostActivity的Theme,并且不想要头部阴影

 * 一定要添加这个android:windowContentOverlay = null</p>

 * 

 * <p>如果想在别的项目里面使用TabHostActivity

 * 可以项目的属性里面找到Android,然后在Library部分添加这个项目(Api)

 * <a href="http://www.cnblogs.com/qianxudetianxia/archive/2011/05/01/2030232.html">如何添加</a></p>

 * */

public class ExampleActivity extends TabHostActivity {


    List<TabItem> mItems;

    private LayoutInflater mLayoutInflater;

    

    /**在初始化TabWidget前调用

     * 和TabWidget有关的必须在这里初始化*/

    @Override

    protected void prepare() {

        TabItem home = new TabItem(

                "首页",                                    // title

                R.drawable.icon_home,                    // icon

                R.drawable.example_tab_item_bg,            // background

                new Intent(this, Tab1Activity.class));    // intent

        

        TabItem info = new TabItem(

                "资料",

                R.drawable.icon_selfinfo,

                R.drawable.example_tab_item_bg,

                new Intent(this, Tab2Activity.class));

        

        TabItem msg = new TabItem(

                "信息",

                R.drawable.icon_meassage,

                R.drawable.example_tab_item_bg,

                new Intent(this, Tab3Activity.class));

        

        TabItem square = new TabItem(

                "广场",

                R.drawable.icon_square,

                R.drawable.example_tab_item_bg,

                new Intent(this, Tab4Activity.class));

        

        TabItem more = new TabItem(

                "更多",

                R.drawable.icon_more,

                R.drawable.example_tab_item_bg,

                new Intent(this, Tab5Activity.class));

        

        mItems = new ArrayList<TabItem>();

        mItems.add(home);

        mItems.add(info);

        mItems.add(msg);

        mItems.add(square);

        mItems.add(more);


        // 设置分割线

        TabWidget tabWidget = getTabWidget();

        tabWidget.setDividerDrawable(R.drawable.tab_divider);

        

        mLayoutInflater = getLayoutInflater();

    }

    

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setCurrentTab(0);

    }

    

    /**tab的title,icon,边距设定等等*/

    @Override

    protected void setTabItemTextView(TextView textView, int position) {

        textView.setPadding(3, 3, 3, 3);

        textView.setText(mItems.get(position).getTitle());

        textView.setBackgroundResource(mItems.get(position).getBg());

        textView.setCompoundDrawablesWithIntrinsicBounds(0, mItems.get(position).getIcon(), 0, 0);

        

    }

    

    /**tab唯一的id*/

    @Override

    protected String getTabItemId(int position) {

        return mItems.get(position).getTitle();    // 我们使用title来作为id,你也可以自定

    }


    /**点击tab时触发的事件*/

    @Override

    protected Intent getTabItemIntent(int position) {

        return mItems.get(position).getIntent();

    }


    @Override

    protected int getTabItemCount() {

        return mItems.size();

    }

    

    /**自定义头部文件*/

    @Override

    protected View getTop() {

        return mLayoutInflater.inflate(R.layout.example_top, null);

    }

}


框架代码:

package com.api;


import android.app.TabActivity;

import android.content.Intent;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.TabHost;

import android.widget.TabHost.TabSpec;

import android.widget.TabWidget;

import android.widget.TextView;


public abstract class TabHostActivity extends TabActivity {


    private TabHost mTabHost;

    private TabWidget mTabWidget;

    private LayoutInflater mLayoutflater;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // set theme because we do not want the shadow

        setTheme(R.style.Theme_Tabhost);

        setContentView(R.layout.api_tab_host);

        

        mLayoutflater = getLayoutInflater();


        mTabHost = getTabHost();

        mTabWidget = getTabWidget();

        //mTabWidget.setStripEnabled(false);    // need android2.2

        

        prepare();


        initTop();

        initTabSpec();

    }

    

    private void initTop() {

        View child = getTop();

        LinearLayout layout = (LinearLayout) findViewById(R.id.tab_top);

        layout.addView(child);

    }


    private void initTabSpec() {


        int count = getTabItemCount();


        for (int i = 0; i < count; i++) {

            // set text view

            View tabItem = mLayoutflater.inflate(R.layout.api_tab_item, null);

            

            TextView tvTabItem = (TextView) tabItem.findViewById(R.id.tab_item_tv);

            setTabItemTextView(tvTabItem, i);

            // set id

            String tabItemId = getTabItemId(i);

            // set tab spec

            TabSpec tabSpec = mTabHost.newTabSpec(tabItemId);

            tabSpec.setIndicator(tabItem);

            tabSpec.setContent(getTabItemIntent(i));

            

            mTabHost.addTab(tabSpec);

        }


    }


    /** 在初始化界面之前调用 */

    protected void prepare() {

        // do nothing or you override it

    }


    /** 自定义头部布局 */

    protected View getTop() {

        // do nothing or you override it

        return null;

    }

    

    protected int getTabCount() {

        return mTabHost.getTabWidget().getTabCount();

    }


    /** 设置TabItem的图标和标题等*/

    abstract protected void setTabItemTextView(TextView textView, int position);


    abstract protected String getTabItemId(int position);

    

    abstract protected Intent getTabItemIntent(int position);


    abstract protected int getTabItemCount();

    

    protected void setCurrentTab(int index) {

        mTabHost.setCurrentTab(index);

    }

    

    protected void focusCurrentTab(int index) {

        mTabWidget.focusCurrentTab(index);

    }

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
tabHost使用
【Android UI设计与开发】5.底部菜单栏(二)使用Fragment实现底部菜单栏
Badge on Android TabHost
android tabHost
android之实现底部TabHost
【Android UI设计与开发】第06期:底部菜单栏(一)使用TabActivity实现底部菜单栏
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服