最终效果展示:

首先我们需要一个ViewPager控件,不过可以发现在左侧的控件列表中并没有这个控件

这时我们要去升级包中查看

然后在厘米找到 ViewPager.class 这时我们双击这个发现不能查看源代码

我们可以通过以 android-support-v4.jar.properties 的一个文件 将其复制到libs目录下 然后双击打开

出现以下代码:

src = E:\\adt-bundle-windows-x86_64-20140702\\sdk\\sources

将路径改为你SDK下对应的sources目录即可 注意 \ 符号要用转义字符 \\ 表示!

做完以上工作后关闭掉项目重新载入一下即可打开升级包的源代码啦!

android-support-v4.jar.properties下载地址:

http://files.cnblogs.com/files/Laopengblog/%E6%9F%A5%E7%9C%8Bsupport.v4%E6%BA%90%E4%BB%A3%E7%A0%81.rar

下面我们打开 ViewPager.class  复制一下包名 android.support.v4.view 用其当做控件名称

附上完整的主布局代码

<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.huarui.my12android2502.MainActivity" > <TabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</TabWidget> <FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- 其实没用就是为了占一个空格 -->
<LinearLayout
android:id="@+id/tab1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost> <android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="fill_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager> </LinearLayout>

activity_main.xml

我们在创建3个布局用来进行他们之间的切换(随意创建即可,我只放了一个Butten稍微区分一下,代码就省略了)

activity_view1.xml

activity_view2.xml

activity_view3.xml

然后开始主代码的编写 重要的注释都在代码里了

package com.huarui.my12android2502;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.app.TabActivity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec; public class MainActivity extends TabActivity { //v
//页面轮换控件
private ViewPager vp;
private TabHost tabHost;
//m 保存一下页面的ID
private int[] pageids = new int[]{
R.layout.view1,
R.layout.view2,
R.layout.view3
};
//c 适配器
private PagerAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initview();
} private void initview() {
setContentView(R.layout.activity_main);
initViewpager(); tabHost = this.getTabHost();
addtab("0","第一页");
addtab("1","第二页");
addtab("2","第三页"); //当tab的选中改变之后 我要触发一个事件 tabHost.setOnTabChangedListener(new OnTabChangeListener() { @Override
//tab 选中改变会触发这个方法
//tabId
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
//拿到了选中的tab的小标
int tabindex = Integer.parseInt(tabId);
//让视图轮换控价 显示第 tabindex的图
vp.setCurrentItem(tabindex); }
});
} private void addtab(String tag,String title) {
TabSpec spec = tabHost.newTabSpec(tag);
spec.setIndicator(title);
spec.setContent(R.id.tab1);
tabHost.addTab(spec);
} private void initViewpager() {
//v
vp = (ViewPager) findViewById(R.id.vp);
//m
//c
adapter = new MyPageAdapter();
//vc
vp.setAdapter(adapter);
//当滑动轮换控件 改变页面的时候 会触发该事件
vp.setOnPageChangeListener(new OnPageChangeListener() { @Override
//position 选中页面的下标
public void onPageSelected(int position) {
// TODO Auto-generated method stub tabHost.setCurrentTab(position); } @Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub }
});
} private class MyPageAdapter extends PagerAdapter{ private List<View> vs; public MyPageAdapter(){
vs = new ArrayList<View>();
for (int i=0;i<pageids.length;i++) {
View view = View.inflate(MainActivity.this, pageids[i], null);
vs.add(view);
} } @Override
//告诉适配器 要轮换的页面总共有多少
public int getCount() {
// TODO Auto-generated method stub
return pageids.length;
} @Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
//谷歌要求这么写
return view==object;
} @Override
//初始化一个条目 (这个方法需要自己添加进来 方法: 右键-Source—Override/...-找到这个方法勾上确定)
//container 就是viewpager 本身
//position 马上要出来的视图的下表
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
//return super.instantiateItem(container, position);
//View view = View.inflate(MainActivity.this, pageids[position], null);
//把视图 加到 轮换容器中去
container.addView(vs.get(position));
//把加进去的视图 作为 返回值返回
return vs.get(position);
} @Override
//销毁条目   (这个方法需要自己添加进来 方法: 右键-Source—Override/...-找到这个方法勾上确定)
//container 容器本身
//position 要销毁的view的下标
//object 即将销毁的page
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
//super.destroyItem(container, position, object);
container.removeView((View)object); } } }

Android 轮换页面+TabHost 实例的更多相关文章

  1. android组件之TabHost

    一 介绍 1.1 TAB的容器.这个对象包含两个子元素: TabWidget:管理标签(tabs),用户点击来选择一个特定的标签,是它告诉TabHost去切换界面的 FrameLayout:对象显示该 ...

  2. android用户界面详尽教程实例

    android用户界面详尽教程实例 1.android用户界面之AlarmManager教程实例汇总http://www.apkbus.com/android-48405-1-1.html2.andr ...

  3. Android实现页面跳转、ListView及其事件

    Android实现页面跳转.ListView及其事件 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 进入主页面后,使用ListView实现特 ...

  4. 利用Div+CSS(嵌套+盒模型)布局页面完整实例流程

    Div+CSS(嵌套+盒模型)布局页面完整实例流程: <!DOCTYPE html><html> <head>  <meta charset="UT ...

  5. Android自动化页面测速在美团的实践

    背景 随着移动互联网的快速发展,移动应用越来越注重用户体验.美团技术团队在开发过程中也非常注重提升移动应用的整体质量,其中很重要的一项内容就是页面的加载速度.如果发生冷启动时间过长.页面渲染时间过长. ...

  6. android用户界面的教程实例---转自qianqianlianmeng的博客

    1.android用户界面之AlarmManager教程实例汇总http://www.apkbus.com/android-48405-1-1.html2.android用户界面之文本编辑教程实例汇总 ...

  7. android 完美的tabhost 切换多activity布局

    TabHost在很多应用都会使用到,有时候在TabHost添加的Tab中设置view不能满足需求,因为在view中添加如PreferenceActivity相当困难. 之前在一个应用中需要实现使用Ta ...

  8. Android微信分享功能实例+demo

    Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留 ...

  9. Android滚动页面位置指示器:CircleIndicator

     Android滚动页面位置指示器:CircleIndicator CircleIndicator是github上的一个开源的用于页面滚动时候的位置指示器,指示当前页面在总的页面中的位置和前后位置 ...

随机推荐

  1. axis2+struts拦截地址冲突问题

    axis2和struts在整合过程中,struts会把axis的地址也拦截了,默认当成一个action处理, 会因为找不到action而报错: <!-- struts配置 --> < ...

  2. Javascript高性能编程-提高javascript加载速度

        1.将所有<script>标签放在尽可能接近<body>标签底部的位置,以保证页面在脚本运行之前完成解析尽量减少对整个页面下载的影响     2.限制页面的<sc ...

  3. Javascript前端和JAVA后端对加密库的处理实例

    前端加密 Javascript的加解密有开源的库,http://www.oschina.net/p/crypto-js/ 如下是具体的使用例子 <!DOCTYPE html> <ht ...

  4. [Deprecated!] Android开发案例 - 微博正文

    Deprecated! 更好的实现方式: 使用 android.support.design.widget.CoordinatorLayout. 本文详细介绍如何实现如下图中的微博正文页面效果, 其中 ...

  5. Atitit.redis操作总结

    Atitit.redis操作总结 1.1. 获取redis所有kv1 1.2. dbsize:返回当前数据库中key的数目 1 1.3. 一起吧所有key列出来1 1.4. Java连接redis   ...

  6. 关于Android中new Notification

    目前 Android 已经不推荐使用下列方式创建 Notification实例: Notification notification = new Notification(R.drawable.ic_ ...

  7. C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  8. 在Ubuntu Server 14.04中搭建FTP服务器(VMWare)

    自己搭建ftp服务器,方便主机与虚拟机中的Ubuntu传输文件. 选用的ftp软件为vsftpd. 1.命令行: sudo apt-get install vsftpd 2.安装完配置: vsftpd ...

  9. AC日记——丑数 codevs 1246

    1246 丑数 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 对于一给定的素 ...

  10. c# MongoDB 经纬度应用示例

    class Program      {          static string mongodb = "mongodb://127.0.0.1:27017";        ...