低版本系统兼容的ActionBar(四)添加Tab+添加自定义的Tab视图+Fragment
在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相关推荐
- 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...
- android 兼容包(可兼容低版本系统)
android 兼容包(可兼容低版本系统) 高Level为了兼容低Level版本,从而推出了兼容包android-support-v* 目前发现的只有三个 android-support-v4 a ...
- Android实现一键复制粘贴,兼容低版本系统(api 11以下)
Android实现一键复制粘贴,兼容低版本系统(api11以下) /** * 实现文本复制功能 * @param content * @return t ...
- html表单居中_如何在IE低版本中兼容HTML5表单属性placeholder属性
WEB开发数据提交是必不可少的,为了更友好的用户体验,通常需要给输入框一个默认的提示信息.HTML5技术提供了一个表单属性placeholder专门用于输入框默认提示,但是在IE低版本中根本不兼容. ...
- MacBook装低版本系统需要的系统包
MacBook装低版本系统需要的系统包! 前因后果: 老MBP装了Catalina后偶尔有点卡.吃资源厉害,就想降回Sierra. 搜了一天国内网站.发现dmg包很少.而且都是网盘下载(百度云盘居多) ...
- android低版本系统部分手机加载不出H5页面
我这个问题出现在android6.0以下的机子上, 其他版本没问题. 解决方法(前三种方法需要Android同学改,第四种需要web前端同学改): 1.启用mixed content 在Androi ...
- 如何将高版本服务器系统转为低版本,iOS高版本备份恢复到低版本系统的方法
一般来说,在更新iOS系统的时候我们都会建议大家先用iTunes对系统进行完整备份.但时不时都会有人偷懒,或者使用手机OTA升级而没有对系统备份,最终导致不满意新系统了,想降级却无备份可以恢复的尴尬局 ...
- HTML data属性简介以及低版本浏览器兼容算法
实例 使用 data-* 属性来嵌入自定义数据: <ul> <li data-animal-type="bird">Owl</li> <l ...
- 低版本浏览器兼容处理
1.HTML5新标签对IE低版本浏览器的兼容处理 问题概述:IE8浏览器中还没有添加对HTML5新标签的支持,当在页面中使用HTML5新标签时,新标签不兼容 1)使用JavaScript新增元素的方法 ...
最新文章
- 做网站应用应注意的那几点
- python秒杀商品 多线程_Python——多线程
- CUDA学习(五十一)
- java ftp上传文件_jaVA使用FTP上传下载文件的问题
- saltstack return数据实时返回收集
- Hadoop2 自己动手编译Hadoop的eclipse插件
- 四、矩阵特征值与特征向量的计算
- 时间序列研(part14)--习题
- 在内网中使用maven_使用nexus搭建内网maven镜像
- 深信服EDR产品线实施遇到的问题
- 苹果电脑怎么设置和修改开机密码?
- python通过手机拍摄的视频图片进行人脸头像采集
- 界面(1):对话框和菜单 打印和按钮等杂项
- 跨站请求伪造 - CSRF
- java ranger rest_Ranger前台分析
- Java 同步、异步
- Unity3D | FPS游戏_人物相关
- 【淘宝SEO】搜索诊断助手新增作弊检测
- GIS开发:nginx发布常用数据
- python中的for循环和while循环
热门文章
- MySQL之定时备份及还原
- DDD China Conference 2017
- 使用 Apache Commons CSV 读写 CSV 文件
- 排球赛程序(个人作业)
- Reference resources
- loadrunner,socket脚本总结
- 让弹出窗口变得“体贴”一些
- 支付宝支付 第六集:生成支付二维码
- Spring-Boot:写出来的网站访问不到静态资源?怎样通过url访问SpringBoot项目中的静态资源?localhost:8989/favicon.ico访问不了工程中的图标资源?
- Redis第四集:redis的基本知识说明