Android开发之底部导航栏标准
以下是封装的库源码:
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开发之底部导航栏标准的更多相关文章
- [置顶]
xamarin android Fragment实现底部导航栏
前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...
- Android UI-仿微信底部导航栏布局
现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢.我们开发的主要的还是讲的是如何如 ...
- Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏
在商城第一篇的开篇当中,我们看到商城的效果图里面有一个底部导航栏效果,如下图所示: 今天我们就来实现商城底部导航栏,最终效果图如下所示: 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使 ...
- Android应用底部导航栏(选项卡)实例
现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图: 其 ...
- Android 修改底部导航栏navigationbar的颜色
Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...
- Android底部导航栏——FrameLayout + RadioGroup
原创文章,转载请注明出处http://www.cnblogs.com/baipengzhan/p/6285881.html Android底部导航栏有多种实现方式,本文详细介绍FrameLayout ...
- Android底部导航栏创建——ViewPager + RadioGroup
原创文章,引用请注明出处:http://www.cnblogs.com/baipengzhan/p/6270201.html Android底部导航栏有多种实现方式,本文详解其中的ViewPager ...
- Android学习笔记- Fragment实例 底部导航栏的实现
1.要实现的效果图以及工程目录结构: 先看看效果图吧: 接着看看我们的工程的目录结构: 2.实现流程: Step 1:写下底部选项的一些资源文件 我们从图上可以看到,我们底部的每一项点击的时候都有不同 ...
- Android底部导航栏
Android底部导航栏 今天简单写了一个底部导航栏,封装了一个库,用法比较简单 效果图 Github地址:https://github.com/kongqw/KqwBottomNavigation ...
随机推荐
- 5分钟了解Mockito
一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...
- ASP.NET MVC:无法向会话状态服务器发出会话状态请求
ylbtech-Error-ASP.NET MVC: 无法向会话状态服务器发出会话状态请求 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Service (ASP.NET ...
- [leetcode]Pow(x, n) @ Python
原题地址:https://oj.leetcode.com/problems/powx-n/ 题意:Implement pow(x, n). 解题思路:求幂函数的实现.使用递归,类似于二分的思路,解法来 ...
- Cookie常用的优化方式
我们知道,对于每一个http请求,无论是动态的网页aspx,还是jsp,还是/user/add这种MVC模式的URL,还是CSS或者JS文件,每一个http请求都会带着在硬盘上存有的跟这个域相关存有的 ...
- QuickXDev插件自己主动升级后player no exist
昨晚上QuickXDev插件执行还ok,今天打开电脑启动sublime text2后.右键run with player提示player no exist watermark/2/text/aHR ...
- R读 txt 文件
house<-read.table("house_data.txt", header = TRUE, sep='|',fileEncoding ='UTF-8') id|ho ...
- WebApi&MVC对比
使用上区分,mvc主要用于建站,web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以 ...
- (纪录片)你必须知道的科学 The Science That You Have To Know (2014)
简介: 类型: 纪录片制片国家/地区: 英国语言: 英语上映日期: 2014-2片长: 150分钟 主要内容: 你有没有认真想过,自己的身体有多奇妙?人体是世间最复杂的一项工程杰作,他也带来了一些非常 ...
- 使用jstl报http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar错误
今天创建了一个maven项目,想使用jstl报http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the ...
- 【转】web.xml不同版本的头
web.xml v2.3 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web- ...