安卓开发_慕课网_ViewPager实现Tab(App主界面)

简介: 学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout  1 7 8 9 14 15...

学习内容来自“慕课网”

网站上一共有4种方法来实现APP主界面的TAB方法

这里学习第一种

ViewPager实现Tab

布局文件有7个,

主界面acitivity.layout 

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6      >    
 7     <include layout="@layout/top"/>
 8     
 9      <android.support.v4.view.ViewPager
10          android:id="@+id/id_viewpager"
11         android:layout_width="fill_parent"
12         android:layout_height="0dp"
13         android:layout_weight="1">
14       
15     </android.support.v4.view.ViewPager>
16     
17     <include layout="@layout/bottom"/>
18 </LinearLayout>
19     
activity_main.xml

头部部分top.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:background="@drawable/title_bar"
 5     android:layout_height="45dp"
 6     android:gravity="center"
 7     android:orientation="vertical" >
 8     <TextView 
 9         android:layout_height="wrap_content"
10         android:layout_width="wrap_content"
11         android:layout_gravity="center"
12         android:text="微信"
13         android:textColor="#ffffff"
14         android:textSize="20sp"
15         android:textStyle="bold"
16         
17         />
18 
19 </LinearLayout>
top.xml

底部部分bottom.xml 

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6      >    
 7     <include layout="@layout/top"/>
 8     
 9      <android.support.v4.view.ViewPager
10          android:id="@+id/id_viewpager"
11         android:layout_width="fill_parent"
12         android:layout_height="0dp"
13         android:layout_weight="1">
14       
15     </android.support.v4.view.ViewPager>
16     
17     <include layout="@layout/bottom"/>
18 </LinearLayout>
19     
bottom.xml

这里有个需要注意的地方,就是ImageButton  他有一个属性android:clickable="false"

注意点在于为LinearLayout设置监听器的时候,会出现点击文字能响应监听事件,而点击图片不会响应的情况,问题在于LinearLayout会把监听事件先交给ImageButton,因为它是可以点击的,而ImageButton中未实现监听器,所以不能响应。解决方法就是设置它不能被点击。在XML文件中,添加android:clickable="false",就可以。

(大家可以试试没有这行属性的情况下,点击图片是否有响应)

还有4个对应功能的layout

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:id="@+id/textView1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:layout_gravity="center_horizontal"
12         android:text="微信"
13         android:textAppearance="?android:attr/textAppearanceMedium" />
14 
15 </LinearLayout>
tab(相同的四个)

 

Mainactivity.java文件

  1 package com.example.viewpager_tab;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import android.os.Bundle;
  7 import android.app.Activity;
  8 import android.support.v4.view.PagerAdapter;
  9 import android.support.v4.view.ViewPager;
 10 import android.support.v4.view.ViewPager.OnPageChangeListener;
 11 import android.view.LayoutInflater;
 12 import android.view.Menu;
 13 import android.view.View;
 14 import android.view.View.OnClickListener;
 15 import android.view.ViewGroup;
 16 import android.view.Window;
 17 import android.widget.Gallery.LayoutParams;
 18 import android.widget.ImageButton;
 19 import android.widget.LinearLayout;
 20 
 21 public class MainActivity extends Activity implements OnClickListener{
 22     
 23     private ViewPager mViewPager;
 24     private PagerAdapter mAdapter;
 25     private List<View> mviews = new ArrayList<View>();
 26     
 27     //Tab
 28     private LinearLayout mTabweixin;
 29     private LinearLayout mTabset;
 30     private LinearLayout mTabfrd;
 31     private LinearLayout mTabadd;
 32     
 33     private ImageButton mweixin_image;
 34     private ImageButton mfrd_image;
 35     private ImageButton madd_image;
 36     private ImageButton mset_image;
 37     @Override
 38     protected void onCreate(Bundle savedInstanceState) {
 39         super.onCreate(savedInstanceState);
 40         requestWindowFeature(Window.FEATURE_NO_TITLE);
 41         setContentView(R.layout.activity_main);
 42         
 43         
 44         initView(); //初始化
 45         
 46         initEvent();//初始化事件
 47         
 48     }
 49 
 50         private void initEvent(){
 51             mTabweixin.setOnClickListener(this);
 52             mTabadd.setOnClickListener(this);
 53             mTabset.setOnClickListener(this);
 54             mTabfrd.setOnClickListener(this);   
 55             
 56             //设置view左右滑动的响应事件
 57             mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 
 58                 
 59                 @Override
 60                 public void onPageSelected(int arg0) {
 61                     // TODO Auto-generated method stub
 62                     int currentItem = mViewPager.getCurrentItem();
 63                     resgmit();
 64                     switch (currentItem) {
 65                     case 0:
 66                         mweixin_image.setImageResource(R.drawable.tab_weixin_pressed);
 67                         break;
 68                     case 1:
 69                         madd_image.setImageResource(R.drawable.tab_address_pressed);
 70                         break;
 71                     case 2:
 72                         mfrd_image.setImageResource(R.drawable.tab_find_frd_pressed);
 73                         break;
 74                     case 3:
 75                         mset_image.setImageResource(R.drawable.tab_settings_pressed);
 76                         break;
 77                     default:
 78                         break;
 79                     }
 80                     
 81                 }
 82                 
 83                 @Override
 84                 public void onPageScrolled(int arg0, float arg1, int arg2) {
 85                     // TODO Auto-generated method stub
 86                     
 87                 }
 88                 
 89                 @Override
 90                 public void onPageScrollStateChanged(int arg0) {
 91                     // TODO Auto-generated method stub
 92                     
 93                 }
 94             });
 95         }
 96         
 97         
 98         private void initView(){
 99             mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
100             //layout
101             mTabadd = (LinearLayout) findViewById(R.id.id_tab_add);
102             mTabfrd = (LinearLayout) findViewById(R.id.id_tab_frd);
103             mTabset = (LinearLayout) findViewById(R.id.id_tab_set);
104             mTabweixin = (LinearLayout) findViewById(R.id.id_tab_weixin);
105             
106             //imagebutton
107             mweixin_image = (ImageButton) findViewById(R.id.id_tab_weixin_image);
108             madd_image = (ImageButton) findViewById(R.id.id_tab_add_image);
109             mfrd_image = (ImageButton) findViewById(R.id.id_tab_frd_image);
110             mset_image = (ImageButton) findViewById(R.id.id_tab_set_image);
111             
112             LayoutInflater mInflater = LayoutInflater.from(this);
113             View tab_1 = mInflater.inflate(R.layout.tab_1, null);
114             View tab_2 = mInflater.inflate(R.layout.tab_2, null);
115             View tab_3 = mInflater.inflate(R.layout.tab_3, null);
116             View tab_4 = mInflater.inflate(R.layout.tab_4, null);
117             
118             mviews.add(tab_1);
119             mviews.add(tab_2);
120             mviews.add(tab_3);
121             mviews.add(tab_4);
122             
123             mAdapter = new PagerAdapter() {
124                 
125                 @Override
126                 public void destroyItem(View container, int position,
127                         Object object) {
128                     // TODO Auto-generated method stub
129                     ((ViewPager) container).removeView(mviews.get(position));
130                     
131                 }
132                 
133                 @Override
134                 public Object instantiateItem(View container, int position) {
135                     // TODO Auto-generated method stub
136                     View view = mviews.get(position);
137                     ((ViewGroup) container).addView(view);
138                     return view;
139                 }
140                 
141                 @Override
142                 public boolean isViewFromObject(View arg0, Object arg1) {
143                     // TODO Auto-generated method stub
144                     return arg0 == arg1;
145                 }
146                 
147                 @Override
148                 public int getCount() {
149                     // TODO Auto-generated method stub
150                     return mviews.size();
151                 }
152             };
153             
154             mViewPager.setAdapter(mAdapter);
155             
156         }
157         
158         @Override
159         public void onClick(View v) {
160             // TODO Auto-generated method stub
161             
162             resgmit();
163             
164             switch (v.getId()) {
165             case R.id.id_tab_weixin:
166                 mViewPager.setCurrentItem(0);
167                 mweixin_image.setImageResource(R.drawable.tab_weixin_pressed);
168                 break;
169             case R.id.id_tab_add:
170                 mViewPager.setCurrentItem(1);
171                 madd_image.setImageResource(R.drawable.tab_address_pressed);
172                 break;
173             case R.id.id_tab_frd:
174                 mViewPager.setCurrentItem(2);
175                 mfrd_image.setImageResource(R.drawable.tab_find_frd_pressed);
176                 break;
177             case R.id.id_tab_set:
178                 mViewPager.setCurrentItem(3);
179                 mset_image.setImageResource(R.drawable.tab_settings_pressed);
180                 break;
181 
182             default:
183                 break;
184             }
185             
186         }
187 
188         //将所有的图片切换为暗色
189         private void resgmit() {
190             // TODO Auto-generated method stub
191             mweixin_image.setImageResource(R.drawable.tab_weixin_normal);
192             madd_image.setImageResource(R.drawable.tab_address_normal);
193             mfrd_image.setImageResource(R.drawable.tab_find_frd_normal);
194             mset_image.setImageResource(R.drawable.tab_settings_normal);
195             
196         }
197     
198 }
MainActivity.java

效果图:

相关文章
|
10天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
15天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
1天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
17天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
19天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
17天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
18天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
26 2
|
19天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
24天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
22天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
38 0