开源控件ViewPagerIndicator学习

导航条指示器。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;    }
时间: 2024-10-18 00:05:25

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

Android之开源控件ViewFLow学习笔记【含下载地址】--(原创-20150407)

Android开源控件ViewFlow学习 这里简单介绍一点:抛出IllegalStateException: "ViewFlow can only be used in EXACTLY mode." 首先要明确ViewFlow的好处所在:(1).ViewFlow比较适合动态大小,如图片的个数由后台决定,发多少就显示多少,这是用ViewPager就不是很合适. ( 2) ViewFlow的轮播滚动效果非常平滑,过渡非常友好,而且支持循环. 使用ViewFlow的时候,注意只能用在大小确

SlidingMenu开源控件侧拉栏无法滑动问题修复,bug解决,

slidingMenu是gitHub上比较流行的一个侧拉菜单开源控件,前几日自己写了一个开源控件,经过对比,感觉slidingMenu功能更为强大,但是同时,自己写的开源控件,侧拉栏是可以滑动的,比如这样, 手指在侧拉栏处滑动的时候,依旧可以关闭侧拉栏,这个功能很使用,尤其是如图所示,当slidingMenu比较宽的时候,占据比较大的比例,此时用户只能在左边小范围内滑动才能关闭掉, 很坑爹呀 有木有????看了大部分的应用,都有此问题,故分享出来供大家一起学习 但是问题来了,翻遍slidingM

分页控件AspNetPager学习笔记

1.AspNetPager简介 AspNetPager是一款开源.简单易用.可定制化等等各种优点的Web分页控件. 2.使用方法 1)下载AspNetPager.dll文件(http://www.webdiyer.com/aspnetpager/downloads/) 2)添加对该文件的引用 3)工具栏右键-选择项,把该dll控件添加进工具栏 4)把该控件拖进设计界面,设置控件的各种属性如下: <webdiyer:AspNetPager ID="AspNetPager1" run

两种主流的实现侧滑菜单控件的学习总结

第一次开始研究侧滑菜单实现还是QQ加入这个功能之后吸引的我,当时就觉得这个侧滑菜单的想法简直独具匠心,使用侧滑菜单的好处必须明显,它可以无形的使我们的屏幕利用更大化,你可以假想自己的屏幕比现实还要大,那个侧滑菜单就藏在看不见的屏幕里,当我们用侧滑手势之后,就将它们从看不见的屏幕里拉入真实屏幕中,当我们使用完菜单后,又可以将它们收回到看不见的屏幕中...这让本来空间就有限的手机屏幕,屏幕利用率得到大大的提高.后来通过自己在网络博客论坛的寻觅,发现了两种比较便捷的能帮助我们实现侧滑菜单效果的控件:

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

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

我的第一个开源控件-DragGridView

我的第一个开源控件出炉了,希望各个小伙伴给个star,支持下.项目地址 1. 前言 由于项目需要,要做一个类似腾讯视频,频道管理,拖拽排序的效果.这个控件是在原地址 之上改造出来的.先看下效果图. 1.0版本的效果图 由于我电脑是ubuntu,没法弄gif,等星期一到了公司上gif吧,不过,github上有apk,可以弄下来看看, 2. 实现思路 2.1 如何响应长按事件 我们虽然可以给view设置监听器,但是我们需要频繁的调用GridVIew的一些方法,显然,那样做是不合适的.于是,我们在on

PullToRefresh开源控件和5.0新特性SwipeRefreshLayout的对比使用

PullToRefresh开源控件可以实现下拉和上拉刷新数据,而后者SwipeRefreshLayout主要用于下拉刷新,知乎的首页刷新数据用的就是这个控件. 一,先介绍PullToRefresh开源控件的使用 PullToRefresh开源控件可以实现下拉和上拉刷新数据,在项目中首先要导入这个包,可以先从github上进行下载,之后在Android Studio中进行导入,之前试了直接导入总会报错,后来直接右键New Module,新建android library即可,按照PullToRef

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

开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便新用户快速了解操作你的应用功能.新手指引的重要性,不言而喻.本文搜集整理了Github上一些效果不错的新手指引开源控件,帮助你的应用在用户面前有更好的效果展示.当然,如果你有精力,也可以自己开发维护一套新手指引效果. GuideView https://github.com/binIoter/GuideView 国人开发者出品的一个轻量级新手指

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns: