最终效果展示:

首先我们需要一个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. 新手入门JUnit单元测试

    首先将JUnit插件安装到Eclipse或myeclipse里面,编写完一个模块或者实体类的时候,直接右击,new一个JUnit项目,选择你想测试的实体类(模块),然后会自动生成一个类,这个类,我们将 ...

  2. linux查看本机IP、gateway、DNS

    IP:     ifconfig gateway:[root@localhost ~]# netstat -rnKernel IP routing tableDestination     Gatew ...

  3. SQL通过ContentTypeID找使用了内容类型的列表库

    DECLARE) SET @ContentTypeID='0x1B452DB25E92A34DA3E35FC8731278D2' SELECT w.Title AS [Web Site], w.Ful ...

  4. Android Weekly Notes Issue #233

    Android Weekly Issue #233 November 27th, 2016 Android Weekly Issue #233 本期内容包括: 用Mockito做RxJava的单元测试 ...

  5. UICollectionView布局cell的三种方式

    UICollectionViewFlowLayout里面: // 方法一 - (void)prepareLayout{} // 方法二 - (nullable NSArray<__kindof ...

  6. ubuntu 16 安装django nginx uWSGI

    参考 https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and- ...

  7. (十一)Maven远程仓库的各种配置

    1.远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他 ...

  8. Node.js学习——基本模块之fs

    基本模块之fs 异步读文件 异步读取一个文本文件的代码如下: 'use strict'; var fs = require('fs'); fs.readFile('sample.txt', 'utf- ...

  9. 初步进行vs单元测试

    首先提一下vs的安装过程,在官网下载免费社区版到本地,根据提示选择安装路径.以及大部分包文件开始安装,等待即可. eclipse的安装比vs多了JDK的下载安装,配置正确的path,以及在eclips ...

  10. Java 条形码 二维码 的生成与解析

    Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...