android Tab =viewpager+fragmnet
1.定义几个fragment 的subclass 如fragmentone,fragmenttwo;
public class fragmentthree extends Fragment {
private View view;
/**
*
*/
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle SaveInflaterState){
view=inflater.inflate(R.layout.fragmentthree, container, false);
return view;
}
}
布局就是一个简单的TextView
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="three fragment" />
</LinearLayout>
2.主布局是这样的
<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" > <android.support.v4.view.ViewPager
android:id="@+id/mViewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1" /> <include layout="@layout/top1" /> </LinearLayout>
其中的top1.xml 如下;定义了三个TextView 作为Tab;
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/cursor_line"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:scaleType="matrix"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal" > <TextView
android:id="@+id/tab01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab01" /> <TextView
android:id="@+id/tab02"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab02" /> <TextView
android:id="@+id/tab03"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="tab03" />
</LinearLayout> </LinearLayout>
3.初始化viewpager
3.1
/*
* 初始化viewpager 1. 数据源 定义了一个List<Fragment> 并添加 Fragment 类 Subclass
* 如fragmentone; 2. 添加适配器 FragmentAdapter ;实例化FragmentAdapter 接口; 3.为
* viewpager 设置适配器;
*/
public void initview() {
// TODO Auto-generated method stub
lf = new ArrayList<Fragment>(); //
lf.add(new fragmentone());
lf.add(new fragmenttwo());
lf.add(new fragmentthree());
mFragAdapter madapter = new mFragAdapter(getSupportFragmentManager(),
lf);//
vp = (ViewPager) findViewById(R.id.mViewpager);
vp.setAdapter(madapter);//
vp.setCurrentItem(0);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
mCurrentPageIndex = position;
tab1.setTextColor(Color.BLACK);
tab2.setTextColor(Color.BLACK);
tab3.setTextColor(Color.BLACK);
switch (position) {
case 0:
tab1.setTextColor(Color.RED);
break;
case 1:
tab2.setTextColor(Color.RED);
break;
case 2:
tab3.setTextColor(Color.RED);
break;
}
}
@Override
public void onPageScrolled(int position, float positionOffset,
int arg2) {
// TODO Auto-generated method stub
//Log.e("TAG", position + "------->" + positionOffset);
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) mTabline
.getLayoutParams();
if (mCurrentPageIndex > position) {
lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + (positionOffset - 1)
* mScreen1_3);
} else {
lp.leftMargin = (int) (mCurrentPageIndex * mScreen1_3 + positionOffset
* mScreen1_3);
}
mTabline.setLayoutParams(lp);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
其中适配器如下;
public class mFragAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragments;
public mFragAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
// TODO Auto-generated constructor stub
mFragments = fragments;
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return mFragments.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mFragments.size();
}
}
4.初始化Tab的滑动条的宽度
/*
* 初始化滑动条的宽度 设置为手机屏幕的1/3
*/ private void initTabLine() {
mTabline = (ImageView) findViewById(R.id.cursor_line);
Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mScreen1_3 = outMetrics.widthPixels / 3;// 屏幕的1/3
// LayoutParams lp = (LayoutParams) mTabline.getLayoutParams();
LinearLayout.LayoutParams lp = (android.widget.LinearLayout.LayoutParams) mTabline
.getLayoutParams();
lp.width = mScreen1_3;
mTabline.setLayoutParams(lp);
}
在3. 中同时定义了刚滑动viewpager 是Tab的滑动条也跟着一起动;
5.Tab按钮的点击事件的定义;
/*
* 初始化tab按钮的事件; 点击某个tab按钮 viewpager 转换fragment 通过ViewPager
* 类的setCurrentIndex()方法设置需要跳转的fragment
*/
private void initTabBtn() {
tab1 = (TextView) findViewById(R.id.tab01);
tab2 = (TextView) findViewById(R.id.tab02);
tab3 = (TextView) findViewById(R.id.tab03);
tab1.setOnClickListener(new mlistenter());
tab2.setOnClickListener(new mlistenter());
tab3.setOnClickListener(new mlistenter());
tab1.setTextColor(Color.RED);
}
public class mlistenter implements View.OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.tab01:
vp.setCurrentItem(0);
break;
case R.id.tab02:
vp.setCurrentItem(1);
break;
case R.id.tab03:
vp.setCurrentItem(2);
break;
}
}
}
其实就是通
vp.setCurrentItem(_index)来设置点击Tab按钮后的viewpager 要显示哪一个fragment
android Tab =viewpager+fragmnet的更多相关文章
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...
- Android中viewPager的一两点使用
Android中viewPager的一两点使用 viewPager是谷歌官方提供的一种方便实现页面滑动效果的控件,可以直接使用也可以和fragment联合使用.这里只简单说下直接使用. 使用viewP ...
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...
- android之ViewPager
在android中ViewPager是非常常用的控件.它在android.support.v4.view.ViewPager下.你们自己可以进http://developer.android.com/ ...
- Android listview viewpager解决冲突 滑动
Android listview viewpager滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 在listview 上使用 addHeaderView 在第 ...
- Android 使用ViewPager实现左右循环滑动图片
ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一 ...
- android使用ViewPager实现欢迎引导页
android使用ViewPager实现欢迎引导页 大多数APP第一次启动的时候,都会有一个引导界面,左右滑动,到最后一张,用户点击才再次进入主界面.当第二次启动的时候,则直接进入主界面. 这种效果一 ...
- android下ViewPager的使用,带下部选项栏的切换动画
(文章针对类似我这种初学者,大神看到不要嘲笑) 演示 我的规矩是先上GIF动画效果(Linux下用转的GIF,清晰度还可以但是不知道为什么放博客上,界面会这么大): 代码: android中有View ...
- Android中ViewPager实现滑动条及与Fragment结合的实例教程
ViewPager类主要被用来实现可滑动的视图功能,这里我们就来共同学习Android中ViewPager实现滑动条及与Fragment结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...
随机推荐
- You need to use a Theme.AppCompat theme
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dji.sdk.sample/com.dji.sdk.sa ...
- storm的作业单元:Topology
Storm系统的数据处理应用单元,是被打包的被称为Topology的作业. 它是由多个数据处理阶段组合而成的,而每个处理阶段在构造时被称为组件(Component),在运行时被称为任务. 那么,组件根 ...
- SOA_Oracle SOA Suite and BPM Suite 11g官方虚拟机安装指南(案例)
参考:Oracle官方 - http://www.oracle.com/technetwork/middleware/soasuite/learnmore/vmsoa-172279.html?ssSo ...
- Form_Form Builder编译fmb/library/menu方式总结(汇总)
2014-12-27 Created By BaoXinjian
- C# 中的事件含义介绍
AutoSizeChanged 当 AutoSize 属性的值更改时发生.(从 ButtonBase 继承.) BackColorChanged 当 BackColor 属性的值更改时发生.(从 ...
- Python进阶06 循环对象
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本概念. 循 ...
- java小程序实例 闰年
判断闰年. package com.test; import java.util.Scanner; import org.junit.Test; public class TestRunNian { ...
- [ActionScript3.0] 为内建类添加方法
通过使用prototype在继承内建类特性的同时加入新方法 Array.prototype.removeElement = function (item:*):void { var index:int ...
- [SQJ]sql如何实现类似统计的功能
假设mssql2000中, 有如下表: table Class class_No course_Name ----------------------------------- chinese mat ...
- viewPager双层嵌套的事件问题
问题描述: ViewPager嵌套viewPager, 当childViewPager中加入了Onclick事件, 导致childViewpager的滑动消息被拦截掉. 很无奈. 解决方法: 重写c ...