在ActionBar中添加Tab是很有用的技巧。在support V7库的支持下,我们几乎可以用和之前一样的方式来添加Tab,对于Tab来说,我们可以和MenuItem一样,给他定义自己的视图。我这里定义了个进度条,主要是来说明这个问题。本系列的博文也将接近尾声了,后面就是个定义ActionBar样式和一个仿照微信的实例,顺便讲解下Fragment和ViewPager的用法。

activity_main.xml(定义了一个FrameLayout来准备存放Fragment)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.kale.actionbar03.MainActivity" ><FrameLayoutandroid:id="@+id/container_id"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>

tab_custom_view.xml(自定义的Tab视图)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><ProgressBarandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:indeterminate="true"/>
</LinearLayout>

MainActivity.java

package com.kale.actionbar03;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;public class MainActivity extends ActionBarActivity implements ActionBar.TabListener{ActionBar actionBar;private static final String SELECTED_ITEM = "selected_item";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);actionBar = getSupportActionBar();//actionbar.setDisplayShowHomeEnabled(false);//actionbar.setDisplayShowTitleEnabled(false);//定义这两行后就会没有标题栏,只有tab栏了//设定有Tab
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);ActionBar.Tab tab;//开始添加Tabfor (int i = 1; i <= 3; i++) {tab = actionBar.newTab();tab.setText("Tab " + i);tab.setTabListener(this);actionBar.addTab(tab);}tab = actionBar.newTab();tab.setCustomView(R.layout.tab_custom_view);tab.setText("x");tab.setTabListener(this);actionBar.addTab(tab);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);if (savedInstanceState.containsKey(SELECTED_ITEM)) {//选中前面保存的索引对应的Fragment页
            actionBar.setSelectedNavigationItem(savedInstanceState.getInt(SELECTED_ITEM));}}@Overrideprotected void onSaveInstanceState(Bundle outState) {//将当前选中的fragment页的索引保存到Bundle中
        outState.putInt(SELECTED_ITEM, actionBar.getSelectedNavigationIndex());super.onSaveInstanceState(outState);}/* * @see android.support.v7.app.ActionBar.TabListener#onTabReselected(android.support.v7.app.ActionBar.Tab, android.support.v4.app.FragmentTransaction)* Tab再次被选中的时候执行的方法*/@Overridepublic void onTabReselected(Tab tab, FragmentTransaction transaction) {}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction transaction) {Toast.makeText(getApplicationContext(), tab.getText(), 0).show();//创建一个新的Fragment的对象Fragment fragment = new DummyFragment();//创建一个Bundle对象,用于向Fragment传入参数Bundle bundle = new Bundle();bundle.putInt(DummyFragment.BUNDLE_SECTION_NUMBER, tab.getPosition()+1);//向Fragment传入参数
        fragment.setArguments(bundle);FragmentTransaction ft = getSupportFragmentManager().beginTransaction();//使用fragment
        ft.replace(R.id.container_id, fragment);ft.commit();} @Overridepublic void onTabUnselected(Tab tab, FragmentTransaction transaction) {}}

DummyFragment.java

package com.kale.actionbar03;import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;public class DummyFragment extends Fragment {public static final String BUNDLE_SECTION_NUMBER = "section_number";// 该返回值就是这个Fragment显示的view组件
    @Overridepublic View onCreateView(LayoutInflater inflater,@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {super.onCreateView(inflater, container, savedInstanceState);TextView textView = new TextView(getActivity());textView.setGravity(Gravity.CENTER);// 获取创建该Fragment时传入的参数的BundleBundle bundle = getArguments();textView.setText("Fragment 0" + bundle.getInt(BUNDLE_SECTION_NUMBER));textView.setTextSize(50);return textView;}
}

源码下载:http://download.csdn.net/detail/shark0017/7688459

低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment相关推荐

  1. 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航

    Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...

  2. android 兼容包(可兼容低版本系统)

    android 兼容包(可兼容低版本系统) 高Level为了兼容低Level版本,从而推出了兼容包android-support-v* 目前发现的只有三个 android-support-v4   a ...

  3. Android实现一键复制粘贴,兼容低版本系统(api 11以下)

    Android实现一键复制粘贴,兼容低版本系统(api11以下) /**         * 实现文本复制功能         * @param content         * @return t ...

  4. html表单居中_如何在IE低版本中兼容HTML5表单属性placeholder属性

    WEB开发数据提交是必不可少的,为了更友好的用户体验,通常需要给输入框一个默认的提示信息.HTML5技术提供了一个表单属性placeholder专门用于输入框默认提示,但是在IE低版本中根本不兼容. ...

  5. MacBook装低版本系统需要的系统包

    MacBook装低版本系统需要的系统包! 前因后果: 老MBP装了Catalina后偶尔有点卡.吃资源厉害,就想降回Sierra. 搜了一天国内网站.发现dmg包很少.而且都是网盘下载(百度云盘居多) ...

  6. android低版本系统部分手机加载不出H5页面

    我这个问题出现在android6.0以下的机子上,  其他版本没问题. 解决方法(前三种方法需要Android同学改,第四种需要web前端同学改): 1.启用mixed content 在Androi ...

  7. 如何将高版本服务器系统转为低版本,iOS高版本备份恢复到低版本系统的方法

    一般来说,在更新iOS系统的时候我们都会建议大家先用iTunes对系统进行完整备份.但时不时都会有人偷懒,或者使用手机OTA升级而没有对系统备份,最终导致不满意新系统了,想降级却无备份可以恢复的尴尬局 ...

  8. HTML data属性简介以及低版本浏览器兼容算法

    实例 使用 data-* 属性来嵌入自定义数据: <ul> <li data-animal-type="bird">Owl</li> <l ...

  9. 低版本浏览器兼容处理

    1.HTML5新标签对IE低版本浏览器的兼容处理 问题概述:IE8浏览器中还没有添加对HTML5新标签的支持,当在页面中使用HTML5新标签时,新标签不兼容 1)使用JavaScript新增元素的方法 ...

最新文章

  1. 做网站应用应注意的那几点
  2. python秒杀商品 多线程_Python——多线程
  3. CUDA学习(五十一)
  4. java ftp上传文件_jaVA使用FTP上传下载文件的问题
  5. saltstack return数据实时返回收集
  6. Hadoop2 自己动手编译Hadoop的eclipse插件
  7. 四、矩阵特征值与特征向量的计算
  8. 时间序列研(part14)--习题
  9. 在内网中使用maven_使用nexus搭建内网maven镜像
  10. 深信服EDR产品线实施遇到的问题
  11. 苹果电脑怎么设置和修改开机密码?
  12. python通过手机拍摄的视频图片进行人脸头像采集
  13. 界面(1):对话框和菜单 打印和按钮等杂项
  14. 跨站请求伪造 - CSRF
  15. java ranger rest_Ranger前台分析
  16. Java 同步、异步
  17. Unity3D | FPS游戏_人物相关
  18. 【淘宝SEO】搜索诊断助手新增作弊检测
  19. GIS开发:nginx发布常用数据
  20. python中的for循环和while循环

热门文章

  1. MySQL之定时备份及还原
  2. DDD China Conference 2017
  3. 使用 Apache Commons CSV 读写 CSV 文件
  4. 排球赛程序(个人作业)
  5. Reference resources
  6. loadrunner,socket脚本总结
  7. 让弹出窗口变得“体贴”一些
  8. 支付宝支付 第六集:生成支付二维码
  9. Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?
  10. Redis第四集:redis的基本知识说明