Android 轮换页面+TabHost 实例
最终效果展示:

首先我们需要一个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 实例的更多相关文章
- android组件之TabHost
一 介绍 1.1 TAB的容器.这个对象包含两个子元素: TabWidget:管理标签(tabs),用户点击来选择一个特定的标签,是它告诉TabHost去切换界面的 FrameLayout:对象显示该 ...
- android用户界面详尽教程实例
android用户界面详尽教程实例 1.android用户界面之AlarmManager教程实例汇总http://www.apkbus.com/android-48405-1-1.html2.andr ...
- Android实现页面跳转、ListView及其事件
Android实现页面跳转.ListView及其事件 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 进入主页面后,使用ListView实现特 ...
- 利用Div+CSS(嵌套+盒模型)布局页面完整实例流程
Div+CSS(嵌套+盒模型)布局页面完整实例流程: <!DOCTYPE html><html> <head> <meta charset="UT ...
- Android自动化页面测速在美团的实践
背景 随着移动互联网的快速发展,移动应用越来越注重用户体验.美团技术团队在开发过程中也非常注重提升移动应用的整体质量,其中很重要的一项内容就是页面的加载速度.如果发生冷启动时间过长.页面渲染时间过长. ...
- android用户界面的教程实例---转自qianqianlianmeng的博客
1.android用户界面之AlarmManager教程实例汇总http://www.apkbus.com/android-48405-1-1.html2.android用户界面之文本编辑教程实例汇总 ...
- android 完美的tabhost 切换多activity布局
TabHost在很多应用都会使用到,有时候在TabHost添加的Tab中设置view不能满足需求,因为在view中添加如PreferenceActivity相当困难. 之前在一个应用中需要实现使用Ta ...
- Android微信分享功能实例+demo
Android微信分享功能实例 1 微信开放平台注册 2 获得appId,添加到程序中,并运行程序 3 使用应用签名apk生成签名,添加到微信开放平台应用签名,完成注册 4 测试分享功能. 有问题请留 ...
- Android滚动页面位置指示器:CircleIndicator
Android滚动页面位置指示器:CircleIndicator CircleIndicator是github上的一个开源的用于页面滚动时候的位置指示器,指示当前页面在总的页面中的位置和前后位置 ...
随机推荐
- 记录一次bug解决过程:规范变量名称和mybatis的使用以及代码优化
一.总结 Mybatis中当parameterType为基本数据类型的时候,统一采用_parameter来代替基本数据类型变量. Mybatis中resultMap返回一个对象,resultType返 ...
- 华为Java编程军规,每季度代码验收标准
引言: 这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值. 军规一:[避免在程序中使用魔鬼数字,必须用有意义的常量来标识.] 军规二:[明确方法的功能,一个方法仅完成一个功能.] 军规三: ...
- 做JavaWeb开发不知Java集合类不如归家种地
Java作为面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.但是使用数组存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容 ...
- Hibernate 系列 08 - 对象识别机制
目录导读: Hibernate 系列 学习笔记 目录 本篇目录: 为了区别不同的对象,有两种识别方法: 1. 内存地址识别(“==”号识别) 2. equals()和hashCode()识别 1. 以 ...
- Mysql常用函数,难点,注意
一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP(x) 返回值e( ...
- zabbix 3.0.3 (nginx)安装过程中的问题排错记录
特殊注明:安装zabbix 2.4.8和2.4.6遇到2个问题,如下:找了很多解决办法,实在无解,只能换版本,尝试换(2.2.2正常 | 3.0.3正常)都正常,最后决定换3.0.3 1.Error ...
- 严重: Exception loading sessions from persistent storage Java.io.EOFException
tomcat启动时报此异常,但web页均能正常运行:对程序影响不大. /*具体原因时tomcat--work--(你当前运行的工程名)--session.ser*/删除即可解决 分析: EOFExce ...
- Animator Controller 继承关系
准备知识 对于Animator Controller中蜘蛛网一样的几十条连线,后续如果靠人工维护,那成本将是很大. AnimatorOverrideController组件的文档:https://do ...
- 产生冠军 hdoj_2094 巧用set
产生冠军 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- swt shell设置窗口位于屏幕中间
/** * 设置窗口位于屏幕中间 * @param shell 要调整位置的窗口对象 */ public static void center(Shell shell) ...