以下是封装的库源码:

 package com.example.oldtab;

 import java.util.ArrayList;

 import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.support.v4.app.FragmentTabHost;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView; public class NsFragmentTabHost implements TabHost.OnTabChangeListener {
private FragmentTabHost fragmentTabHost;
private LayoutInflater layoutInflater;
private Resources resources;
private ArrayList<NsFragmentItem> tabs;
private NsFragmentItem preItem; NsFragmentTabHost(FragmentTabHost tabhost, ActionBarActivity activity) {
this(tabhost, activity, android.R.id.tabcontent);
} NsFragmentTabHost(FragmentTabHost tabhost, ActionBarActivity activity,
int realContentid) {
fragmentTabHost = tabhost;
tabs = new ArrayList<NsFragmentItem>();
layoutInflater = activity.getLayoutInflater();
resources = activity.getResources();
tabhost.setup(activity.getBaseContext(),
activity.getSupportFragmentManager(), realContentid);
tabhost.setOnTabChangedListener(this);
} public View newTabView(int layoutid, int backgroung, String title) {
TextView tv = (TextView) layoutInflater.inflate(layoutid, null);
tv.setText(title);
Drawable draw = resources.getDrawable(backgroung);
tv.setCompoundDrawablesWithIntrinsicBounds(null, draw, null, null);
return tv;
} public void AddTab(NsFragmentItem item) {
tabs.add(item);
fragmentTabHost.addTab(fragmentTabHost.newTabSpec(item.tag)
.setIndicator(item.view), item.fragment, null);
} public NsFragmentItem getTabByTag(String tag) {
for (NsFragmentItem item : tabs) {
if (item.tag == tag) {
return item;
}
}
return null;
} @Override
public void onTabChanged(String tabId) {
NsFragmentItem item = getTabByTag(tabId);
if (item != null) {
if (preItem != null) {
preItem.view.setBackgroundResource(preItem.upStyle);
}
preItem = item;
item.view.setBackgroundResource(item.downStyle);
}
} public static class NsFragmentItem {
public View view;
public String tag;
public Class<?> fragment;
public int downStyle;
public int upStyle;
}
}

下面就是示例,如何使用上面的库

 package com.example.oldtab;

 import android.os.Bundle;
import android.support.v4.app.FragmentTabHost;
import android.support.v7.app.ActionBarActivity;
import android.view.View; import com.example.oldtab.NsFragmentTabHost.NsFragmentItem; public class Main extends ActionBarActivity { private static final String TAG_PERSON = "person";
private static final String TAG_GROUP = "group";
private static final String TAG_SETTING = "setting"; private NsFragmentTabHost nsTabHost;
private FragmentTabHost tabHost; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
nsTabHost = new NsFragmentTabHost(tabHost, this, R.id.realtabcontent);
View i1 = nsTabHost.newTabView(R.layout.tabitem,
R.drawable.ic_action_person, "个人");
View i2 = nsTabHost.newTabView(R.layout.tabitem,
R.drawable.ic_action_group, "集体");
View i3 = nsTabHost.newTabView(R.layout.tabitem,
R.drawable.ic_action_settings, "设置");
NsFragmentItem item1 = new NsFragmentItem();
item1.view = i1;
item1.tag = TAG_PERSON;
item1.fragment = PersonFragment.class;
item1.downStyle = R.drawable.tab_spec_down;
item1.upStyle = R.drawable.tab_spec_nomal;
NsFragmentItem item2 = new NsFragmentItem();
item2.view = i2;
item2.tag = TAG_GROUP;
item2.fragment = GroupFragment.class;
item2.downStyle = R.drawable.tab_spec_down;
item2.upStyle = R.drawable.tab_spec_nomal;
NsFragmentItem item3 = new NsFragmentItem();
item3.view = i3;
item3.tag = TAG_SETTING;
item3.fragment = SettingFragment.class;
item3.downStyle = R.drawable.tab_spec_down;
item3.upStyle = R.drawable.tab_spec_nomal;
nsTabHost.AddTab(item1);
nsTabHost.AddTab(item2);
nsTabHost.AddTab(item3);
}
}

Android开发之底部导航栏标准的更多相关文章

  1. [置顶] xamarin android Fragment实现底部导航栏

    前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment  Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...

  2. Android UI-仿微信底部导航栏布局

    现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢.我们开发的主要的还是讲的是如何如 ...

  3. Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏

    在商城第一篇的开篇当中,我们看到商城的效果图里面有一个底部导航栏效果,如下图所示: 今天我们就来实现商城底部导航栏,最终效果图如下所示:   那么这种效果是如何实现,实现的方式有很多种,最常见的就是使 ...

  4. Android应用底部导航栏(选项卡)实例

    现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...

  5. Android 修改底部导航栏navigationbar的颜色

    Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...

  6. Android底部导航栏——FrameLayout + RadioGroup

    原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6285881.html Android底部导航栏有多种实现方式,本文详细介绍FrameLayout ...

  7. Android底部导航栏创建——ViewPager + RadioGroup

    原创文章,引用请注明出处:http://www.cnblogs.com/baipengzhan/p/6270201.html Android底部导航栏有多种实现方式,本文详解其中的ViewPager ...

  8. Android学习笔记- Fragment实例 底部导航栏的实现

    1.要实现的效果图以及工程目录结构: 先看看效果图吧: 接着看看我们的工程的目录结构: 2.实现流程: Step 1:写下底部选项的一些资源文件 我们从图上可以看到,我们底部的每一项点击的时候都有不同 ...

  9. Android底部导航栏

    Android底部导航栏 今天简单写了一个底部导航栏,封装了一个库,用法比较简单 效果图 Github地址:https://github.com/kongqw/KqwBottomNavigation ...

随机推荐

  1. [转]PHP SOCKET编程

    FROM : http://blog.csdn.net/hguisu/article/details/7448528 1. 预备知识 一直以来很少看到有多少人使用php的socket模块来做一些事情, ...

  2. 对拍练习:A+B

    源程序: /* Problem: OJ: User: S.B.S. Time: Memory: Length: */ #include<iostream> #include<cstd ...

  3. OA系统权限管理设计方案【转】

    l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. l 可以对“组”进行权限分配.对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是 ...

  4. 接收连接basic_socket_acceptor

    概述 TCP有一处和UDP不同的地方是TCP是面向连接的,TCP有建立连接.通信.关闭连接的操作,Boost.Asio提供了ip::tcp::acceptor用来接收新的TCP连接,底层由socket ...

  5. QT 5.12 安装MinGW 7.3.0 32bit

    一.下载MinGW 7.3.0 32bit for QT 5.12 链接:https://pan.baidu.com/s/1IKDhvxEbKIgmWyQQhpdnTw提取码:ubxc 二.解压缩并将 ...

  6. 第二章 BIO与NIO

    <netty权威指南>读书笔记 一.BIO 1.服务端程序: package bio; import java.io.BufferedReader; import java.io.IOEx ...

  7. DLL文件实现窗体的模板模式

    机房合作版中第一次使用了模板方法,实现了类似窗体的界面和代码的复用..窗体继承有两种方法,一种是通过继承选择器从已编译的程序集合里选择,另一种则是通过DLL文件的方式继承.个人觉得DLL还是比较方便的 ...

  8. leetcode Roman Integer

    class Solution { public: int romanToInt(string s) { if (s.length() < 1) return 0; map<char,int ...

  9. 8Manage PMP 项目管理工具

    范围与需求管理 8Manage 项目管理平台提供先进的机制集中管理项目的范围与需求: 提供需求申请功能:获取,过滤,解析和明确项目的需求 提供需求矩阵功能:整理分析需求并跟踪需求从开始到完成的整个过程 ...

  10. easyui基于web的打印实现 .

    <%@ page language="java"pageEncoding="UTF-8"%> <object id="WebBrow ...