Android ViewPager+ViewPagerIndicator实现Tab主界面
来源:互联网 发布:php extjs 编辑:程序博客网 时间:2024/06/05 09:07
实现类似网易精选这样的效果:
技术分析
ViewPager+ViewPagerIndicator实现
布局
主界面从上到下是
- top标题栏
- 中间是ViewPagerIndicator
- 下面是ViewPager
<LinearLayout 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:orientation="vertical" tools:context=".MainActivity" > <include layout="@layout/top" /> <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:background="@color/tab_bg" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="0dp" android:id="@+id/vp_content" android:layout_weight="1" /></LinearLayout>
MainAcitivity里,
1. 控件初始化,
2. ViewPager设置适配器
3. 将ViewPager和ViewPagerIndicator关联,
public class MainActivity extends FragmentActivity { private ViewPager mViewPager; private TabPageIndicator mIndicator; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); } private void initView() { mViewPager = (ViewPager) findViewById(R.id.vp_content); mIndicator = (TabPageIndicator) findViewById(R.id.indicator); mAdapter = new MyAdapter(getSupportFragmentManager()); mViewPager.setAdapter(mAdapter); //将ViewPager和Indicator关联起来,设置默认选中第一个title mIndicator.setViewPager(mViewPager, 0); }}
适配器FragmentPageAdapter
重写下面的三个方法即可,注意getPageTitle()
public class MyAdapter extends FragmentPagerAdapter { //标题字符串数组 public static final String[] TITLES = new String[] { "课程", "问答", "求课", "学习", "计划" }; public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { NewsFragment newsFragment = new NewsFragment(arg0); return newsFragment; } @Override public int getCount() { return TITLES.length; } @Override public CharSequence getPageTitle(int position) { return TITLES[position % TITLES.length]; }}
其中的Fragment
这里需要注意的是标记type,通过type确定当前选中的是哪个标题
然后显示相应的内容
@SuppressLint("ValidFragment") public class NewsFragment extends Fragment { private int newsType = 0; //初始化时,传入当前选中的title的id,通过id选择内容 public NewsFragment(int newsType) { super(); this.newsType = newsType; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_news, null); TextView tv = (TextView) view.findViewById(R.id.tv_news_content); tv.setText(MyAdapter.TITLES[newsType]); return view; }}
最后设置ViewPagerIndicator的样式
在清单文件中,将其设置到所在Activity的主题上
<style name="MyTheme" parent="AppBaseTheme"> <item name="vpiTabPageIndicatorStyle">@style/MyWidget.TabPageIndicator</item> <item name="android:windowNoTitle">true</item> <item name="android:animationDuration">5000</item> <item name="android:windowContentOverlay">@null</item> </style> <style name="MyWidget.TabPageIndicator" parent="Widget"> <item name="android:gravity">center</item> <item name="android:background">@drawable/vpi__tab_indicator</item> <item name="android:paddingLeft">22dip</item> <item name="android:paddingRight">22dip</item> <item name="android:paddingTop">8dp</item> <item name="android:paddingBottom">8dp</item> <item name="android:textAppearance">@style/MyTextAppearance.TabPageIndicator</item> <item name="android:textSize">16sp</item> <item name="android:maxLines">1</item> </style> <style name="MyTextAppearance.TabPageIndicator" parent="Widget"> <item name="android:textStyle">bold</item> <item name="android:textColor">@android:color/black</item> </style>
例子代码
https://github.com/qiwei0727/ViewPagerIndicatorDemo
0 0
- Android ViewPager+ViewPagerIndicator实现Tab主界面
- Android Tab实现之Viewpager+ViewpagerIndicator
- 多种多样的App主界面Tab实现方法——利用ViewPagerIndicator+ViewPager实现Tab
- ViewPagerIndicator与ViewPager实现Tab
- 使用ViewpagerIndicator与viewpager实现tab标签
- ViewPager+Fragment实现Tab主界面
- viewpager+FragmentAdapter实现App主界面Tab
- 用ViewPager实现主界面Tab
- viewpager+tab 主界面的实现
- 多种多样的App主界面Tab实现方法(四):ViewPagerIndicator实现tab功能
- Android项目Tab、ViewPager主界面
- android ViewPager实现App主界面Tab菜单页面切换和点击事件
- [Android] Android项目Tab类型主界面Fragment+TabPageIndicator+ViewPager
- Android项目Tab类型主界面大总结 Fragment+ViewPager
- 多种多样的App主界面Tab实现方法——单独利用ViewPager实现Tab
- 多种多样的App主界面Tab实现方法——利用ViewPager+FragmentPagerAdapter实现Tab
- Android底部Tab+ViewPager(微信界面)
- 【Android】ViewPager实现Tab布局
- 数据库扩展之索引添加
- H5 HTML代码编写规范及注意要点
- win7 rabbitMQ 安装配置命令(需配置环境变量)
- 2015异常问题解决方案经验总结(一) (转发)
- 一个执行计划异常变更的案例 - 外传之rolling invalidation
- Android ViewPager+ViewPagerIndicator实现Tab主界面
- CentOS 6自动安装RabbitMQ脚本
- UIFramework之数据表读取工具
- 【学习总结】verticle-align 的理解
- [仿南航app开发日记5]查成绩界面开发完成以及使用PopupWindow踩过的坑
- Leetcode 33. Search in Rotated Sorted Array
- 类的初始化练习和static关键字的用法
- 奥巴马最近的精彩演讲《我们为什么要上学》英汉互译
- Leetcode Flatten Binary Tree to Linked List