Android ViewPager+TabHost实现首页导航

今天发的是TabHost结合ViewPager实现首页底部导航的效果,虽然说网上有很多这样的Demo,不过呢,我还是要把自己练习写的发出来,没错!就是这么任性; 
先上效果图,如下:

代码里面有注释,就不过多解释了,说几点需要注意的问题 
1:TabHost 、TabWidget、FrameLayout一定添加id这个属性,否则会报错 
android:id=”@android:id/tabhost” 
android:id=”@android:id/tabcontent” 
android:id=”@android:id/tabs” 
这个属性是固定的。 
2:ViewPager的适配器要继承PagerAdapter,别整错咯; 
布局文件xml:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:id="@android:id/tabhost"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context="com.example.wgh.tabhostwithviewpager.MainActivity">
 8
 9     <LinearLayout
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         android:orientation="vertical">
13
14         <FrameLayout
15             android:id="@android:id/tabcontent"
16             android:layout_width="match_parent"
17             android:layout_height="match_parent"
18             android:layout_weight="1.0">
19
20             <android.support.v4.view.ViewPager
21                 android:id="@+id/viewPager"
22                 android:layout_width="match_parent"
23                 android:layout_height="match_parent"></android.support.v4.view.ViewPager>
24
25         </FrameLayout>
26
27         <TabWidget
28             android:id="@android:id/tabs"
29             android:layout_width="match_parent"
30             android:layout_height="match_parent"
31             android:layout_weight="0.0"
32             android:visibility="gone" />
33
34         <View
35             android:layout_width="match_parent"
36             android:layout_height="1dp"
37             android:background="#0ff0f0" />
38
39         <RadioGroup
40             android:id="@+id/radioGroup"
41             android:layout_width="match_parent"
42             android:layout_height="wrap_content"
43
44             android:orientation="horizontal">
45
46             <RadioButton
47                 android:id="@+id/radioButton1"
48                 android:layout_width="0dp"
49                 android:layout_height="wrap_content"
50                 android:layout_margin="5dp"
51                 android:layout_weight="1"
52                 android:background="@drawable/img_draw_money_fail"
53                 android:button="@null"
54                 android:paddingLeft="10dp" />
55
56             <RadioButton
57                 android:id="@+id/radioButton2"
58                 android:layout_width="0dp"
59                 android:layout_height="wrap_content"
60                 android:layout_margin="5dp"
61                 android:layout_weight="1"
62                 android:background="@drawable/img_draw_money_fail"
63                 android:button="@null" />
64
65             <RadioButton
66                 android:id="@+id/radioButton3"
67                 android:layout_width="0dp"
68                 android:layout_height="wrap_content"
69                 android:layout_margin="5dp"
70                 android:layout_weight="1"
71                 android:background="@drawable/img_draw_money_fail"
72                 android:button="@null" />
73
74             <RadioButton
75                 android:id="@+id/radioButton4"
76                 android:layout_width="0dp"
77                 android:layout_height="wrap_content"
78                 android:layout_margin="5dp"
79                 android:layout_weight="1"
80                 android:background="@drawable/img_draw_money_fail"
81                 android:button="@null" />
82         </RadioGroup>
83     </LinearLayout>
84 </TabHost>

Activity:

  1 package com.example.wgh.tabhostwithviewpager;
  2
  3 import android.app.TabActivity;
  4 import android.os.Bundle;
  5 import android.support.v4.view.ViewPager;
  6 import android.view.LayoutInflater;
  7 import android.view.View;
  8 import android.widget.RadioButton;
  9 import android.widget.RadioGroup;
 10 import android.widget.TabHost;
 11
 12 import java.util.ArrayList;
 13
 14 public class MainActivity extends TabActivity {
 15
 16     private TabHost tabHost = null;
 17     private ViewPager viewPager = null;
 18     private RadioGroup radioGroup = null;
 19     private ArrayList<View> list = null;
 20     private View view1 = null;
 21     private View view2 = null;
 22     private View view3 = null;
 23     private View view4 = null;
 24     private RadioButton radioButton1 = null;
 25     private RadioButton radioButton2 = null;
 26     private RadioButton radioButton3 = null;
 27     private RadioButton radioButton4 = null;
 28
 29     @Override
 30     protected void onCreate(Bundle savedInstanceState) {
 31         super.onCreate(savedInstanceState);
 32         setContentView(R.layout.activity_main);
 33         initView();
 34         initData();
 35
 36         //设置初始化默认选项
 37         radioGroup.check(R.id.radioButton1);
 38         radioButton1.setBackgroundResource(R.drawable.img_draw_money_success);
 39         viewPager.setCurrentItem(0);
 40         tabHost.setCurrentTab(0);
 41
 42         //getViewPager添加适配器
 43         MyAdapter adapter = new MyAdapter(list);
 44         viewPager.setAdapter(adapter);
 45
 46     /**
 47      * viewPager设置滑动监听,根据viewPager选中页的position,设置tabHost页卡选项的样式
 48      */
 49
 50         viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 51             @Override
 52             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 53             }
 54
 55             @Override
 56             public void onPageSelected(int position) {
 57                 if (position == 0){
 58                     radioButton1.setBackgroundResource(R.drawable.img_draw_money_success);
 59                     radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
 60                     radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
 61                     radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
 62                 }else if(position == 1){
 63                     radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
 64                     radioButton2.setBackgroundResource(R.drawable.img_draw_money_success);
 65                     radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
 66                     radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
 67                 }else if(position == 2){
 68                     radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
 69                     radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
 70                     radioButton3.setBackgroundResource(R.drawable.img_draw_money_success);
 71                     radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
 72                 }else if(position == 3){
 73                     radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
 74                     radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
 75                     radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
 76                     radioButton4.setBackgroundResource(R.drawable.img_draw_money_success);
 77                 }
 78             }
 79
 80             @Override
 81             public void onPageScrollStateChanged(int state) {
 82             }
 83         });
 84
 85     /**
 86      * 给radioGroup设置监听,以此来改变ViewPager的页面
 87      */
 88         radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
 89             @Override
 90             public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
 91                 switch (checkedId){
 92                     case R.id.radioButton1:
 93                         viewPager.setCurrentItem(0);
 94                         radioButton1.setBackgroundResource(R.drawable.img_draw_money_success);
 95                         radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
 96                         radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
 97                         radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
 98                         break;
 99                     case R.id.radioButton2:
100                         viewPager.setCurrentItem(1);
101                         radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
102                         radioButton2.setBackgroundResource(R.drawable.img_draw_money_success);
103                         radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
104                         radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
105                         break;
106                     case R.id.radioButton3:
107                         viewPager.setCurrentItem(2);
108                         radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
109                         radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
110                         radioButton3.setBackgroundResource(R.drawable.img_draw_money_success);
111                         radioButton4.setBackgroundResource(R.drawable.img_draw_money_fail);
112                         break;
113                     case R.id.radioButton4:
114                         viewPager.setCurrentItem(3);
115                         radioButton1.setBackgroundResource(R.drawable.img_draw_money_fail);
116                         radioButton2.setBackgroundResource(R.drawable.img_draw_money_fail);
117                         radioButton3.setBackgroundResource(R.drawable.img_draw_money_fail);
118                         radioButton4.setBackgroundResource(R.drawable.img_draw_money_success);
119                         break;
120                 }
121             }
122         });
123     }
124
125     /**
126      * 初始化数据源
127      */
128     private void initData() {
129         list = new ArrayList<View>();
130         list.add(view1);
131         list.add(view2);
132         list.add(view3);
133         list.add(view4);
134     }
135
136      /**
137      * 初始化控件
138      */
139     private void initView() {
140         tabHost = getTabHost();
141
142         viewPager = (ViewPager) findViewById(R.id.viewPager);
143         radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
144         radioButton1 = (RadioButton) findViewById(R.id.radioButton1);
145         radioButton2 = (RadioButton) findViewById(R.id.radioButton2);
146         radioButton3 = (RadioButton) findViewById(R.id.radioButton3);
147         radioButton4 = (RadioButton) findViewById(R.id.radioButton4);
148      /**
149      * 将每页要展示的layout实例出来,添加到list里面,最后通过适配器return回来要展示的相应的layout
150      */
151         LayoutInflater inflater = LayoutInflater.from(this);
152         view1 = inflater.inflate(R.layout.layout_one,null);
153         view2 = inflater.inflate(R.layout.layout_two,null);
154         view3 = inflater.inflate(R.layout.layout_three,null);
155         view4 = inflater.inflate(R.layout.layout_four,null);
156     }
157
158 }

ViewPager适配器MyAdapter:

 1 public class MyAdapter extends PagerAdapter {
 2     private ArrayList<View> list = null;
 3
 4     public MyAdapter(ArrayList<View> list) {
 5         this.list = list;
 6     }
 7
 8     @Override
 9     public int getCount() {
10         return list.size();
11     }
12
13     @Override
14     public boolean isViewFromObject(View arg0, Object arg1) {
15         return arg0 == arg1;
16     }
17
18     @Override
19     public Object instantiateItem(ViewGroup container, int position) {
20         container.addView(list.get(position));
21         return list.get(position);
22     }
23     @Override
24     public void destroyItem(ViewGroup container, int position, Object object) {
25
26         container.removeView(list.get(position));
27
28     }
29 }

如果有什么问题,欢迎留言!

时间: 2024-11-06 09:45:52

Android ViewPager+TabHost实现首页导航的相关文章

Android:简单实现ViewPager+TabHost+TabWidget实现导航栏导航和滑动切换

viewPager是v4包里的一个组件,可以实现滑动显示多个界面. android也为viewPager提供了一个adapter,此adapter最少要重写4个方法: public int getCount() public boolean isViewFromObject(View view, Object o) public void destroyItem(ViewGroup container, int position, Object object)  public Object in

android ViewPager左右滑动实现导航栏的背景随页面滑动而滑动

实现viewPager和导航栏进行结合的效果图:废话不说直接上图看效果:      随着左右的滑动背景的黄色也随着滑动,代码如下: 布局  weibo_2.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=

Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换

上一篇博文我们介绍了利用ViewPager和Fragment实现顶部滑块左右滑动效果,具体参考(http://blog.csdn.net/a123demi/article/details/39480385). 而本篇博文将实例讲解利用ViewPager实现底部圆点导航左右滑动效果,以及被滑动界面实现监听事件,同时通过Fragment实现页面的切换. 对于该效果的实现,需要实现以下几个问题: 1. 底部圆点加载和实现方法? 2. 怎样实现左右滑动效果? 3. 被滑动页面,怎样实现监听事件? 4.

【Android基础篇】TabHost实现底部导航栏

在App应用中,导航栏往往是用于解决功能分块的最佳控件,而底部导航栏更是导航栏中最常用的,因为它位于屏幕底部,用户操作起来会很方便. 下面介绍一下使用Android控件TabHost实现底部导航栏的方法. TabHost可以在控件库里直接拖到页面上,非常方便,但拖出来的是顶部导航栏,如下图所示: 到这里就可以开始实现底部导航栏了,我们首先转到它的XML布局代码里,然后修改成下面这样: <FrameLayout xmlns:android="http://schemas.android.co

Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡

 <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePageIndicator(原文链接:http://blog.csdn.net/zhangphil/article/details/44752213),自己写了一个底部带有滑块.且当ViewPager页面切换时候选项卡也随之相应切换,且滑块也随之相应动态滑动效果得控件.但写的太过于紧耦合,不利于复用,所以现在重构

Android——ViewPager+Fragment+ListView之间

Android--ViewPager+Fragment+ListView之间 <span style="font-size:18px;">package com.example.jreduch05; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.A

关于在Android中如何设置底部导航栏

Android应用底部导航栏(选项卡)实例 现在很多android的应用都采用底部导航栏的功能,这样可以使得用户在使用过程中随意切换不同的页面,现在我采用TabHost组件来自定义一个底部的导航栏的功能. 我们先看下该demo实例的框架图:   其中各个类的作用以及资源文件就不详细解释了,还有资源图片(在该Demo中借用了其它应用程序的资源图片)也不提供了,大家可以自行更换自己需要的资源图片.直接上各个布局文件或各个类的代码: [1]  res/layout目录下的maintabs.xml 源码

Android ViewPager + Fragment的布局

ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html 2.这里用ViewPager+Fragment做个导航界面: 效果图如下: 3.对实现的思路进行一个简单的介绍: 上面的导航菜单里面的选项卡的总长度是超过了屏幕的,所以用了一个自定义HorizontalScrollView,在自定义HorizontalScrollView中加了两个箭头的图片根据滚动

android ViewPager详解

Viewpager 在android界面布局中属于常用类型 ,它可以做导航,页面菜单,进入软件是的欢迎界面 等等.比现在最流行的几款手机软件  ,QQ,微信,微博 等 ,其主界面 都用到了ViewPager,所以学好它,势在必得 ,在这里总结了下, 先用图解 : 这是一个仿微博界面的xml布局 ,他们之间的关系经常搞混淆,怕记不住 ,总结了几句话:ViewPager里面含界面,它的改变控制(title)Imageview的变化,Textview控制页面,并间接控制Title(imageview)