导航条指示器。ViewPagerIndicator

地址 https://github.com/JakeWharton/ViewPagerIndicator

Style是重用控件的一种技术。类似CSS。作用范围只是一个控件

Theme本质也是一种一种Style技术。作用范围是页面,整个应用程序。

1. 创建Activity,和布局。

    <!-- 指示器 indicator -->
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/tpi_Indicator
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#FFFFFF" />

<!-- 内容 -->

<android.support.v4.view.ViewPager
android:id="@+id/vp_page"
android:layout_width="match_parent"
android:layout_height="match_parent" />

2. 绑定数据 。

    @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 获取到控件
ViewPager vpPager = (ViewPager) findViewById(R.id.vp_page);
tabPageIndicator = (TabPageIndicator) findViewById(R.id.tpi_Indicator);
// 设置数据
vpPager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager()));
tabPageIndicator.setViewPager(vpPager);
}

private class MyFragmentAdapter extends FragmentPagerAdapter
{

public MyFragmentAdapter(FragmentManager fm)
{
super(fm);
framgents.add(new FirstFragment());
framgents.add(new SencodFragment());
framgents.add(new ThirdFragment());
framgents.add(new FourFragment());

titleList.add("日本");
titleList.add("美国");
titleList.add("加拿大");
titleList.add("芝加哥");
}

@Override
public Fragment getItem(int arg0)
{
return framgents.get(arg0);
}

@Override
public int getCount()
{
return framgents.size();
}

//设置标题
@Override
public CharSequence getPageTitle(int position)
{
return titleList.get(position);
}

}

3. 设置theme. 和控件的样式。

  <style name="AppBaseTheme" parent="android:Theme.Light">
<item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
</style>

<!-- -->
<!-- <item name="android:divider">@drawable/custom_tab_indicator_divider</item> -->

<style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator">
<item name="android:background">@drawable/custom_tab_indicator</item>
<item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
<item name="android:textColor">#FF555555</item>
<item name="android:textSize">16sp</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingRight">8dp</item>
<item name="android:fadingEdge">horizontal</item>
<item name="android:fadingEdgeLength">8dp</item>
</style>

<!-- 字体我也那过来 -->
<style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium">
<item name="android:typeface">monospace</item>
</style>

动态添加标题

  1. 设置布局
  2. 添加事件。动态标题更新。
     */
public void addTitle(View view)
{
framgents.add(new AddFragment());
titleList.add("新页面");
// 通过页面刷新
mAdapter.notifyDataSetChanged();
// 指示器也要更新
tabPageIndicator.notifyDataSetChanged();

// 页面跟踪
vpPager.setCurrentItem(framgents.size()-1);
}

Fragment Bug修复。

在页面切换的时候。用户在本页面输入的数据会丢失。

原因:碎片在每次创建的时候都会onCreateView`也就是每次都要加载一次布局。解决办法保存上一次布局就好

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (rootView == null) {
rootView = View.inflate(getActivity(), getLayoutId(), null);
initView(rootView);
} else {
// ViewGroup :所有布局的父类
ViewGroup parent = (ViewGroup) rootView.getParent();
if (parent != null)// 已经添加
{
parent.removeView(rootView);
}
}
return rootView;
}

开源控件ViewPagerIndicator学习的更多相关文章

  1. 开源控件ViewPagerIndicator的使用

    此文转载自http://www.jianshu.com/p/a2263ee3e7c3 前几天学习了ViewPager作为引导页和Tab的使用方法.后来也有根据不同的使用情况改用Fragment作为Ta ...

  2. 分页控件AspNetPager学习笔记

    1.AspNetPager简介 AspNetPager是一款开源.简单易用.可定制化等等各种优点的Web分页控件. 2.使用方法 1)下载AspNetPager.dll文件(http://www.we ...

  3. Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

    在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...

  4. visual studio 2015引入开源控件DockPanel(最简单的方法)

    一.DockPanel简介 DockPanel是一个开源控件,能够实现子窗口的浮动,在官方给的demo有演示,在vs2017微软已经集成进入常用控件中.我主要使用的是多窗口浮动,和tabControl ...

  5. 开源整理:Android App新手指引开源控件

    开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便新用户快速了解操作你的应用功能.新手指引的重要 ...

  6. 转载: 开源整理:Android App新手指引开源控件

    http://blog.coderclock.com/2017/05/22/android/open-source-android-app-guide-view-library/ 开源整理:Andro ...

  7. 我的第一个开源控件-DragGridView

    我的第一个开源控件出炉了,希望各个小伙伴给个star,支持下.项目地址 1. 前言 因为项目须要,要做一个相似腾讯视频.频道管理.拖拽排序的效果.这个控件是在原地址 之上改造出来的.先看下效果图. 1 ...

  8. .Net 开源控件 NPlot使用小结

    NPlot是一款非常难得的.Net平台下的图表控件,能做各种曲线图,柱状图,饼图,散点图,股票图等,而且它免费又开源,使用起来也非常符合程序员的习惯.授权方式为BSD许可证. 下载链接: http:/ ...

  9. FMX开源控件

    FMX开源控件 这是群友谢顿做的控件,必须赞一个! https://github.com/zhaoyipeng/FMXComponents 这是loki的: https://sourceforge.n ...

随机推荐

  1. Linux下的iwpriv(iwlist、iwconfig)的简单应用

    无线网络飞速发展的今天,许多设备都提供了连接无线网络的功能. 那么Linux下的wifi到底该怎么配置.连接呢?? 开始配置之前,我们要说说iw家族.iw是linux下常用的wifi配置工具,网上有相 ...

  2. POJ 3342 (树形DP)

    题意 :给出一些上下级关系,要求i和i的直接上级不能同时出现,现在选出一些人构成一个集合,问你这个集合里面的最大人数是都少,同时给出这个最大的人数的集合是否唯一. 思路:树形DP,dp[i][0],表 ...

  3. [转]用C#实现的条形码和二维码编码解码器

    条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形 ...

  4. C#中属性简写原理

    1. 属性简写时不能只有get或者set 原因: 如果只有get,那么没有办法给其赋值,所有也就没法get到值: 如果只有set,没有意义,因为根本没法获取到这个值.

  5. eclipse中 将java项目转换为web项目 博客分类: Tomcat

      1.找到项目工作空间目录,打开.project文件,并修改文件, 修改如下:      找到:<natures> </natures>代码段,在代码段中加入如下内容并保存: ...

  6. Codeforces149D - Coloring Brackets(区间DP)

    题目大意 要求你对一个合法的括号序列进行染色,并且需要满足以下条件 1.要么不染色,要么染红色或者蓝色 2.对于任何一对括号,他们当中有且仅有一个被染色 3.相邻的括号不能染相同的颜色 题解 用区间d ...

  7. Select the best path in a matrix

    Amazon interview question: Given a 2-dimensional array with arbitrary sizes and contains random posi ...

  8. Win7 64位 安装E10后 打不开的解决方案 -摘自网络

    但是后来发现点击IE图标没有任何反应,因此从网络上寻求帮助!将经验分享大家!进入注册表(运行regedit),找到 HKEY_CURRENT_USER\Software\Microsoft\Inter ...

  9. tcpclient 类

    1. 构造函数 1) 类对象将套接字与本地系统地址和一个随机的tcp端口号进行绑定. 在默认的tcpclient 对象创建后,必须使用connect方法与远程设备连接. TcpClient tc = ...

  10. Robotium学习笔记一

    一. 重签名问题 1.从手机Pull所需的apk通过压缩工具删除META-INF目录 2.通过以下命令行进行签名 >jarsigner -keystore "C:\Documents ...