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://blog.csdn.net/jerehedu/

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 05:42:44

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

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

一.问题描述 侧边栏是Android应用中十分常见的界面效果,可随主屏在左侧或右侧联动,是特别适应手机等小屏幕特性的典型界面设计方案之一,常用作应用的操作菜单,如图所示 实现侧边栏可以使用第三方组件slidingmenu实现和Google官方提供的滑动抽屉组件DrawerLayout实现,下面就分别使用这两种方法实现左右滑动的侧边栏 二.先使用之前讲过的ActionBar制作标题栏 这里只贴出代码,相关知识请查阅 <Android典型界面设计(4)--使用ActionBar+Fragment实现

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

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

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

一.问题描述 双导航tab切换(底部区块+区域内头部导航),实现方案底部区域使用FragmentTabHost+Fragment, 区域内头部导航使用ViewPager+Fragment,可在之前博客Android典型界面设计2(FragmentTabHost+Fragment实现底部tab切换)基础之上和Android典型界面设计1(ViewPage+Fragment实现区域顶部tab滑动切换)整合应用实现.查看两篇博客请点击:http://www.cnblogs.com/jerehedu/p

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

一.问题描述 在Android典型界面设计一文中,实现典型滑动导航界面,其实使用ActionBar 也可以轻松实现这一效果,甚至也可实现类似Android典型界面设计(3)的双导航效果.可见ActionBar还是比较强大的,关键要深入进去.灵活的运用,下面我们就使用ActionBar实现如图所示的效果: 二.本例特点 1.  兼容低版本 2. 使用ActionBar 分体设计(split) 3. Tab使用自定义View 4. 结合ViewPager实现滑动导航 三.代码讲解: 1.在项目中加入

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

Android典型界面设计——FragmentTabHost+Fragment实现底部tab切换 Android学习笔记:TabHost 和 FragmentTabHost

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

一.问题描述 在Android典型界面设计(3)的我们实现了双导航效果,即外层底部导航和内部区域的头部导航,如网易新闻等很多应用采用了这种导航,但Google提供DrawerLayout可实现抽屉式导航,建议使用DrawerLayout代替底部导航,下面我们就使用官方提供的DrawerLayout+Fragement+ViewPager+PagerTabStrip实现下图效果: 二.本例相关技术 1. DrawerLayout 抽屉式导航 2. Fragment管理 3. ViewPager和P

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

一.问题描述 本系列将结合案例应用,陆续向大家介绍一些Android典型界面的设计,首先说说tab导航,导航分为一层和两层(底部区块+区域内头部导航),主要实现方案有RadioGroup+ViewPage+Fragment.Viewpager Indicator.ActionBar Tabs.FragmentTabHost+Fragment等,下面我们先采用RadioGroup+ViewPage+Fragment实现区域头部导航. 如图所示: 二.案例主要组件 1.先看一下MainActivit

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

一.问题描述 PagerSlidingTabStrip是android开源项目,指示器控件.官网地址:https://github.com/astuetz/PagerSlidingTabStrip 该组件可和ViewPager结合实现效果不错的滑动式导航,最大特点是滑动条可跟随ViewPager联动,不过PagerSlidingTabStrip只有文字或图片两种,没有提供图片和文字的混合的形式,感觉更适合实现头部的导航,不太适合做底部导航(一般底部导航都是典型的上图下字的导航),不过可以通过修改

Android:界面设计工具DroidDraw

DroidDraw是款强大的安卓界面设计软件,基于Java Swing开发,可以通过它拖动控件.设置层属性.设置颜色等步骤轻松地生成复杂的安卓XML布局文件. >>>>>>>>下载 Android:界面设计工具DroidDraw