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结合的实例教程,需要的朋友可以参考下 自主实现滑动指示条先上一个 ...
随机推荐
- ADF_General JSF系列3_将JSP页面绑定到一个Managed Bean
2015-02-17 Created By BaoXinjian
- UVA 272 TEX Quotes
TEX Quotes 题意: 变引号. 题解: 要想进步,真的要看一本好书,紫书P45 代码: #include<stdio.h> int main() { int c,q=1; whil ...
- python (7)读取整个目录的所有文件夹并存入
一,提取出来一个文件夹中的所有文件名并存入到txt文件中 import os import sys reload(sys) sys.setdefaultencoding('utf-8') path = ...
- @Autowired失效
今天发现了一个使用@Autowired但是注入失败的问题. 后来发现原来是一个Validator中有@Autowired , 并试图注入一个service , 但是这个service始终是null , ...
- Map的3种遍历[轉]
Map<String, String> map = new HashMap<String, String>(); map.put("A", "AA ...
- ylbtech-dbs:ylbtech-5,RI(报销发票系统)
ylbtech-dbs:ylbtech-5,RI(报销发票系统) -- =============================================-- DatabaseName:Pur ...
- Java多线程之捕获异常
1.主线程不能捕获到子线程的异常 package Thread.Exection; import java.util.concurrent.ExecutorService; import java.u ...
- iOS 图片拉伸 resizableImageWithCapInsets
UIImage *image = [[UIImage imageNamed:@"test.png"] resizableImageWithCapInsets:UIEdgeInse ...
- 怎么查询局域网内全部电脑IP和mac地址等信息?
在局域网内查询在线主机的IP一般比较简单,但局域网内全部电脑的IP怎么才能够查到呢?查询到IP后我还要知道对方的一些详细信息(如MAC地址.电脑名称等)该怎么查询呢??? 工具/原料 Windows ...
- thinkphp 访问其它控制器模板
默认的访问该方法对应得模板:$this->display() 访问其它控制器模板:$this->display(‘控制器名/方法’)