一、问题描述

  之前我们使用ViewPager+Fragment区域内头部导航,在Android 3.0之后Google增加了新的ActionBar,可方便的实现屏幕Head部区域的 设计如返回键、标题、ICON、Logo、自定义View以及菜单等,并可实现Tab导航,下面我们就使用ActionBar实现下图所示界面设计:

二、案例主要组件

  1、编写TBActivity

public class TBActivity extends Activity {
private ActionBar actionBar;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tb);
initActionBar();
initTab();
}
@SuppressLint("NewApi")
private void initActionBar(){
actionBar=super.getActionBar();//获得ActionBar
actionBar.setDisplayShowHomeEnabled(true);//显示home区域
actionBar.setDisplayHomeAsUpEnabled(true);//显示返回图片
actionBar.setHomeAsUpIndicator(R.drawable.back);//设置返回图标
//去除默认的ICON图标
Drawable colorDrawable=new
ColorDrawable(android.R.color.transparent);
actionBar.setIcon(colorDrawable);
//设置自定义View
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setCustomView(R.layout.head_logo);
//设置导航模式为Tabs方式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
private void initTab(){
Bundle bundle1=new Bundle();
bundle1.putString("title", "挖掘机区块信息");
Tab tab1= actionBar.newTab().setText("挖掘机").setTabListener(
new TabListener<FirstFragment>(this, "挖掘机", FirstFragment.class,bundle1));
actionBar.addTab(tab1); Bundle bundle2=new Bundle();
bundle2.putString("title", "装载机区块信息");
Tab tab2=actionBar.newTab().setText("装载机").setTabListener(
new TabListener<SecondFragment>(this, "装载机",
SecondFragment.class,bundle2));
actionBar.addTab(tab2); Bundle bundle3=new Bundle();
bundle3.putString("title", "平地机区块信息");
Tab tab3=actionBar.newTab().setText("平地机").setTabListener(
new TabListener<ThirdFragment>(this,
"平地机",ThirdFragment.class,bundle3));
actionBar.addTab(tab3);
Bundle bundle4=new Bundle();
bundle4.putString("title", "更多区块信息");
Tab tab4=actionBar.newTab().setText("更多").setTabListener(
new TabListener<FourFragment>(this,
"更多", FourFragment.class,bundle4));
actionBar.addTab(tab4);
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.tb, menu);
return true;
} }

  2、TabListener组件

public class TabListener<T extends Fragment>
implements android.app.ActionBar.TabListener{
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private Bundle bundle;
public TabListener(Activity activity, String tag, Class<T> clz,Bundle bundle) {
mActivity = activity;
mTag = tag;
mClass = clz;
this.bundle=bundle;
} @Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
if(mFragment==null){
mFragment=Fragment.instantiate(mActivity, mClass.getName());
mFragment.setArguments(bundle);//向Fragment传递参数
ft.add(android.R.id.content,mFragment, mTag);
}else{
ft.attach(mFragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if(mFragment!=null){
ft.detach(mFragment);
}
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) { } }

  3、设计四个tab区域的Fragment

  分别为:(FirstFragment、SecondFragment、ThirdFragment、FourFragment),这里以FirstFragment为例(其他在这里无差别)

public class FirstFragment extends Fragment {
private String title;
@Override
public void setArguments(Bundle bundle) {
// TODO Auto-generated method stub
title=bundle.getString("title");
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setText(title);
textView.setTextSize(20);
textView.setTextColor(Color.RED);
textView.setGravity(Gravity.CENTER);
LinearLayout layout = new LinearLayout(getActivity());
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(textView, params);
return layout;
}
}

  4、定义ActionBar的样式

   <style name="MyActionBar" parent="@android:style/Theme.Holo.Light">
<item name="android:actionBarStyle">@style/actionbar_style</item>
<!-- 给操作栏中的选项标签定义样式资源 -->
<item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
<!-- 给导航选项标签中的文本定义样式资源。 -->
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabTextStyle</item>
</style> <!-- actionbar样式 -->
<style name="actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">#EA4609</item>
<item name="android:titleTextStyle">@style/ActionBar_titleStyle</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:itemPadding">20dip</item>
</style>
<!-- Tab选项标签的样式 -->
<style name="MyActionBarTabStyle"
parent="@android:style/Widget.Holo.Light.ActionBar.TabView">
<item name="android:background">@drawable/tab_selector</item>
<item name="android:paddingLeft">0dp</item>
<item name="android:paddingRight">0dp</item>
<item name="android:height">100dp</item>
</style>
<!-- Tab选项标签字体的样式 -->
<style name="MyActionBarTabTextStyle"
parent="@android:style/Widget.Holo.Light.ActionBar.TabText">
<item name="android:textColor">#666666</item>
<item name="android:textSize">18sp</item>
</style>

在TBActivity上设置样式android:theme=” @style/MyActionBar

  想要了解更多内容的小伙伴,可以点击查看源码,亲自运行测试。

  疑问咨询或技术交流,请加入官方QQ群: (452379712)

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换的更多相关文章

  1. Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏

    一.问题描述 侧边栏是Android应用中十分常见的界面效果,可随主屏在左侧或右侧联动,是特别适应手机等小屏幕特性的典型界面设计方案之一,常用作应用的操作菜单,如图所示 实现侧边栏可以使用第三方组件s ...

  2. Android典型界面设计(3)——访网易新闻实现双导航tab切换

    一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...

  3. Android典型界面设计-访网易新闻实现双导航tab切换

    一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...

  4. Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航

    一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ...

  5. Android典型界面设计(7) ——DrawerLayout+Fragement+ViewPager+PagerTabStrip实现双导航

    一.问题描述 在Android典型界面设计(3)的我们实现了双导航效果,即外层底部导航和内部区域的头部导航,如网易新闻等很多应用采用了这种导航,但Google提供DrawerLayout可实现抽屉式导 ...

  6. Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换

    一.问题描写叙述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航).主要实现方案有RadioGroup+View ...

  7. Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换

    一.问题描述 在上次博文中,我们使用RadioGroup+ViewPage+Fragmen实现了顶部滑动导航(查看文章:http://www.cnblogs.com/jerehedu/p/460759 ...

  8. Android典型界面设计(8) ——ViewPager+PagerSlidingTabStrip实现双导航

    一.问题描述 PagerSlidingTabStrip是android开源项目,指示器控件.官网地址:https://github.com/astuetz/PagerSlidingTabStrip 该 ...

  9. Android的界面设计工具 DroidDraw

    Android的界面设计工具 DroidDraw DroidDraw 下载地址:http://code.google.com/p/droiddraw/ 如图 也可以使用在线的版本(http://www ...

随机推荐

  1. 深度学习Bible学习笔记:第二、三章 线性代数 概率与信息论

    推荐资源: <线性代数的本质>:Essence of linear algebra 视频教程 <数学之美>(科普类书籍),吴军系列书籍都不错. 易向军<大嘴巴漫谈数据挖掘 ...

  2. IntelliJ IDEA像Eclipse一样打开多个项目(转)

    转自: 海涛zht666   IntelliJ IDEA像Eclipse一样打开多个项目 我们做项目实际中经常会遇到这样的情况,创建一个common项目(Maven项目)作为公用项目,common中有 ...

  3. poj 1125 谣言传播 Floyd 模板题

    假如有3个点 点1到点2要5分钟 点1到点3要3分钟 那么5分钟的时间可以传遍全图 所以要先找一个点到其他点的最长时间 再从最长的时间里找出最小值 Sample Input 3 // 结点数2 2 4 ...

  4. Shiro介绍

    前言 本文主要讲解的知识点有以下: 权限管理的基础知识 模型 粗粒度和细粒度的概念 回顾URL拦截的实现 Shiro的介绍与简单入门 一.Shiro基础知识 在学习Shiro这个框架之前,首先我们要先 ...

  5. PHP Excel导入日期单元格处理

    PHPExcel导入Excel文件,对Excel中日期单元格处理 /** * 判断字符串是否是日期格式 * @param $date * @param $format * @return bool * ...

  6. BZOJ2618 [Cqoi2006]凸多边形 凸包 计算几何

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2618 题意概括 给出多个凸包,求面积交. 题解 首先我们考虑两个凸包相交的情况. 例题:HDU16 ...

  7. python中confIgparser模块学习

    python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...

  8. IdentityServer4-用EF配置Client(一)

    一.背景 IdentityServer4的介绍将不再叙述,百度下可以找到,且官网的快速入门例子也有翻译的版本.这里主要从Client应用场景方面介绍对IdentityServer4的应用. 首先简要介 ...

  9. shell 安装使用VIM

    安装:http://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html ubuntu系统: 普通用户下输入命令:sudo apt-get i ...

  10. BZOJ.1430.小猴打架(Prufer)

    题目链接 猴子之间的打架是棵无根树,有\(n^{n-2}\)种可能:同时n-1个过程的排列是\((n-1)!\) //820kb 104ms #include <cstdio> const ...