Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换
| 一、问题描述 |
之前我们使用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切换的更多相关文章
- Android典型界面设计(5)——使用SlidingMenu和DrawerLayout分别实现左右侧边栏
一.问题描述 侧边栏是Android应用中十分常见的界面效果,可随主屏在左侧或右侧联动,是特别适应手机等小屏幕特性的典型界面设计方案之一,常用作应用的操作菜单,如图所示 实现侧边栏可以使用第三方组件s ...
- Android典型界面设计(3)——访网易新闻实现双导航tab切换
一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...
- Android典型界面设计-访网易新闻实现双导航tab切换
一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客 ...
- Android典型界面设计(6)——ActionBar Tab+ViewPager+Fagment实现滑动导航
一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见Actio ...
- Android典型界面设计(7) ——DrawerLayout+Fragement+ViewPager+PagerTabStrip实现双导航
一.问题描述 在Android典型界面设计(3)的我们实现了双导航效果,即外层底部导航和内部区域的头部导航,如网易新闻等很多应用采用了这种导航,但Google提供DrawerLayout可实现抽屉式导 ...
- Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换
一.问题描写叙述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航).主要实现方案有RadioGroup+View ...
- Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换
一.问题描述 在上次博文中,我们使用RadioGroup+ViewPage+Fragmen实现了顶部滑动导航(查看文章:http://www.cnblogs.com/jerehedu/p/460759 ...
- Android典型界面设计(8) ——ViewPager+PagerSlidingTabStrip实现双导航
一.问题描述 PagerSlidingTabStrip是android开源项目,指示器控件.官网地址:https://github.com/astuetz/PagerSlidingTabStrip 该 ...
- Android的界面设计工具 DroidDraw
Android的界面设计工具 DroidDraw DroidDraw 下载地址:http://code.google.com/p/droiddraw/ 如图 也可以使用在线的版本(http://www ...
随机推荐
- php和NodeJs共存的开发环境
1 折腾 php nodejs 到一起 nodejs当然很火,就像着火了一样,但是必须承认要搭建一个前端的demo开发环境还是PHP靠谱, windows下可以非常的集成套件,比如http://www ...
- C++ code:for loop designs
1 用for循环编出系列图形 该图形一共10行,每一行增加一个字符,所以应循环10次,每次输出一行.其循环模式为: :i<=;++i) { 输出第i行 换行 } 我们注意到,每一行长度的变化正 ...
- 神经网络,前向传播FP和反向传播BP
1 神经网络 神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入.例如,下图就是一个简单的神经网络: 我们使用圆圈来表示神经网络的输入,标上“”的圆 ...
- eclipse 更换主题
更换系统自带主题 依次点击 window->preferences->General->Appearance->Theme 选择主题 下载eclipse marketplace ...
- Lavarel - 模块间复用代码
代码复用在项目中早晚会遇到,这不在用 Laravel 给博客增加 Feed 订阅功能 就到了需要将生成网页 description 的函数提取出来,在文章显示与 Feed 生成的两个 Controll ...
- bzoj营业额统计
这个也是板子题吧,很水,求前驱后继即可 /* 插入,求前驱和后继 */ #include<iostream> #include<cstring> #include<cst ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- c# 服务安装后自动启动
switch (rs) { case 1: var path = @&q ...
- 080 HBase的属性
一:基本属性 1.查看属性 2.解释属性 NAME:列簇名 BLOOMFILTER:布隆过滤器,用于对storefile的过滤 共有三种类型: ROW:行健过滤 ROWCOL:行列过滤 NONE:无 ...
- moodle3.15+,mysql完全的Unicode支持配置
https://docs.moodle.org/dev/Releases,moodle个版本升级的主要内容和改动 在windows是mysql.ini linux 下是mysql.cnf 因为MyS ...