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 ...
随机推荐
- SVG.js 图案使用和use引用
一.SVG.Pattern 图案设置 var draw = SVG('svg1').size(300, 300); //SVG.Pattern 图案设置 var pattern = draw.patt ...
- [转]Linux系统下如何查看及修改文件读写权限
转自 :http://www.cnblogs.com/CgenJ/archive/2011/07/28/2119454.html 查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx ...
- [转]微信JSAPI 微信内置JSAPI 2015年1月官方正式API接口,分享完整实例
FROM : http://www.oschina.net/code/snippet_2276613_45290 HTML通过微信,分享朋友圈出发此JSAPI <?php require_onc ...
- 在Visual Studio 2013里使用 Microsoft SQL Server Compact Edition
(1)下载SQLCE组件 https://www.microsoft.com/en-us/download/details.aspx?id=17876 (2)下载VS2013工具设计器 https:/ ...
- 数据库实例: STOREBOOK > 数据文件/退回字段/重做日志组|管理员
ylbtech-Oracle:数据库实例: STOREBOOK > 数据文件/退回字段/重做日志组|管理员 数据文件/退回字段/重做日志组|管理员 1. 数据库实例: STOREBOOK & ...
- eclipse.ini 内存设置
Ubuntu 系统下,Eclipse 配置文件: vi ~/eclipse/eclipse.ini -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:Max ...
- 中文分词库及NLP介绍,jieba,gensim的一些介绍
六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...
- [leetcode]Wildcard Matching @ Python
原题地址:https://oj.leetcode.com/problems/wildcard-matching/ 题意: Implement wildcard pattern matching wit ...
- 【图片识别】java 图片文字识别 ocr (转)
http://www.cnblogs.com/inkflower/p/6642264.html 最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为 ...
- 轻松解决vuejs跨域
Vuejs跨域问题实战 有时候,本地使用webpack开启一个node的dev端口,项目中使用vuejs去访问别人家的api,比如豆瓣或者其他的api,不使用jsonp肯定就会报跨域的问题. 如何让我 ...