低版本系统兼容的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" >
- <FrameLayout
- android: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">
- <ProgressBar
- android: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";
- @Override
- protected 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;
- //开始添加Tab
- for (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);
- }
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- super.onRestoreInstanceState(savedInstanceState);
- if (savedInstanceState.containsKey(SELECTED_ITEM)) {
- //选中前面保存的索引对应的Fragment页
- actionBar.setSelectedNavigationItem(savedInstanceState.getInt(SELECTED_ITEM));
- }
- }
- @Override
- protected 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再次被选中的时候执行的方法
- */
- @Override
- public void onTabReselected(Tab tab, FragmentTransaction transaction) {
- }
- @Override
- public 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();
- }
- @Override
- public 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组件
- @Override
- public 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时传入的参数的Bundle
- Bundle 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(一)设置颜色+添加Menu+添加ActionMode
之前我一直用ActionBarSherlock这个开源项目来做ActionBar,因为它可以让低版本的设备也能用上ActionBar.但是在最新的SDK中Google提供了一个AppCompa ...
- 低版本系统兼容的ActionBar(二)ActionProvider+分离式ActionBar+分离式的ActionMode
这篇文章主要讲的是在低版本兼容的ActionBar中实现自定义的ActionProvider,ShareActionProvider的使用方法,如何实现分离式ActionBar,外加在分 ...
- 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...
- 低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar
一.自定义MenuItem的视图 custom_view.xml (就是一个单选按钮) <?xml version="1.0" encoding="u ...
- 低版本系统兼容的ActionBar(七)自定义Actionbar标题栏字体
这个自定义字体其实和ActionBar有关,但之前写AtionBar的时候没考虑到修改字体样式,今天看到一篇专门写这个的文章就贴上使用方式.╮(╯▽╰)╭,不得不说Actionbar的那个样式真是让人 ...
- 低版本系统兼容的ActionBar(五)修改ActionBar的全套样式,从未如此简单过
设定ActionBar的样式,是我们必须掌握的技能,在之前我们可能都需要一行一行的写代码,然后在模拟器上测试效果,但是现在我们有个一个很棒的工具来设定样式.设定ActionBar样式的工作从 ...
- Android 高版本API方法在低版本系统上的兼容性处理
Android 版本更替,新的版本带来新的特性,新的方法. 新的方法带来许多便利,但无法在低版本系统上运行,如果兼容性处理不恰当,APP在低版本系统上,运行时将会crash. 本文以一个具体的例子说明 ...
- hyperscan在低版本系统应用问题
编译环境:centos6.3 32位/64位 由于hyperscan使用许多C++11特性,在低版本系统gcc版本不能编译.后来发现在runtime时也就是hs_scan时只需要依赖libhs_run ...
- angularjs1+requirejs+ bootstrap+ jQuery低版本配合兼容ie8+浏览器
angularjs兼容低版本IE浏览器(IE8)angularjs在1.3之后的版本都是选择放弃对IE8及更低IE版本的支持,但是就目前的开发形式来看,IE8的使用客户还是蛮多的,最近有个项目要求尽量 ...
随机推荐
- .NetCore 下使用多个DbContext
一个项目中使用多个DbContext 或者种数据库的多个DbContext 业务需要 单个DbContext使用不需要给出说明 1.dotnet ef migrations add migration ...
- T-SQL语句4
一.插入数据 1.insert语句介绍 insert into table_name(column1,column2……column)values(value1,value2,……valueN)//c ...
- hdu 2519 求组合数
求组合数 如果求C5 3 就是5*4*3/3*2*1 也就是(5/3)*(4/2)*(3/1) Sample Input5 //T3 2 //C3 25 34 43 68 0 Sample Outpu ...
- 【LOJ】#2536. 「CQOI2018」解锁屏幕
题解 什么破题,看一眼就能想出来\(n^2 2^n\)看了一眼数据范围有点虚,结果跑得飞快= = 处理出\(a[i][j]\)表示从\(i\)到\(j\)经过的点的点集 然后\(f[i][S]\)表示 ...
- OpenCV中的SVM参数优化
OpenCV中的SVM参数优化 svm参数优化opencv SVMSVR参数优化CvSVMopencv CvSVM SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最常用的 ...
- 039 DataFrame的理解
1.构成 由RDD+Schema构成 RDD: DataFrame中的数据 ===> df.rdd Schema: RDD中数据的结构 ===> df.schema df是dataFram ...
- django 使用 request 获取浏览器发送的参数
django 使用 request 获取浏览器发送的参数 转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...
- 024.Zabbix告警等级机制
一 等级告警 告警升级可以对告警结果按自定义的时间段进行进行消息发送,并执行命令,形成一个梯度的告警处理. 二 按时间自定义告警梯度 2.1 添加时间发生的时间戳和发送时间 2.2 设置三个等级梯度 ...
- Nmap扫描教程之基础扫描详解
Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...
- BZOJ4816 Sdoi2017数字表格
一开始只推出O(TN)的做法,后来看了看发现再推一步就好了. 我们只需要枚举gcd就可以啦. 然后我们改变一下枚举顺序 设T为dk 预处理中间那部分前缀积就好了. #include<bits/s ...