1.ViewPager实现Tab

首先实现底部和底部布局

  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="45dp"
  5. android:background="@drawable/title_bar"
  6. android:gravity="center"
  7. android:orientation="vertical" >
  8.  
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_gravity="center"
  13. android:text="微信"
  14. android:textColor="#ffffff"
  15. android:textSize="20sp"
  16. android:textStyle="bold" />
  17.  
  18. </LinearLayout>

底部布局

  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="55dp"
  5. android:background="@drawable/bottom_bar"
  6. android:orientation="horizontal" >
  7.  
  8. <LinearLayout
  9. android:id="@+id/id_tab_weixin"
  10. android:layout_width="0dp"
  11. android:layout_height="fill_parent"
  12. android:layout_weight="1"
  13. android:gravity="center"
  14. android:orientation="vertical" >
  15.  
  16. <ImageButton
  17. android:id="@+id/id_tab_weixin_img"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:background="#00000000"
  21. android:clickable="false"
  22. android:src="@drawable/tab_weixin_pressed" />
  23.  
  24. <TextView
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:text="微信"
  28. android:textColor="#ffffff" />
  29. </LinearLayout>
  30.  
  31. <LinearLayout
  32. android:id="@+id/id_tab_frd"
  33. android:layout_width="0dp"
  34. android:layout_height="fill_parent"
  35. android:layout_weight="1"
  36. android:gravity="center"
  37. android:orientation="vertical" >
  38.  
  39. <ImageButton
  40. android:id="@+id/id_tab_frd_img"
  41. android:layout_width="wrap_content"
  42. android:layout_height="wrap_content"
  43. android:background="#00000000"
  44. android:clickable="false"
  45. android:src="@drawable/tab_find_frd_normal" />
  46.  
  47. <TextView
  48. android:layout_width="wrap_content"
  49. android:layout_height="wrap_content"
  50. android:text="朋友"
  51. android:textColor="#ffffff" />
  52. </LinearLayout>
  53.  
  54. <LinearLayout
  55. android:id="@+id/id_tab_address"
  56. android:layout_width="0dp"
  57. android:layout_height="fill_parent"
  58. android:layout_weight="1"
  59. android:gravity="center"
  60. android:orientation="vertical" >
  61.  
  62. <ImageButton
  63. android:id="@+id/id_tab_address_img"
  64. android:layout_width="wrap_content"
  65. android:layout_height="wrap_content"
  66. android:background="#00000000"
  67. android:clickable="false"
  68. android:src="@drawable/tab_address_normal" />
  69.  
  70. <TextView
  71. android:layout_width="wrap_content"
  72. android:layout_height="wrap_content"
  73. android:text="通讯录"
  74. android:textColor="#ffffff" />
  75. </LinearLayout>
  76.  
  77. <LinearLayout
  78. android:id="@+id/id_tab_settings"
  79. android:layout_width="0dp"
  80. android:layout_height="fill_parent"
  81. android:layout_weight="1"
  82. android:gravity="center"
  83. android:orientation="vertical" >
  84.  
  85. <ImageButton
  86. android:id="@+id/id_tab_settings_img"
  87. android:layout_width="wrap_content"
  88. android:layout_height="wrap_content"
  89. android:background="#00000000"
  90. android:clickable="false"
  91. android:src="@drawable/tab_settings_normal" />
  92.  
  93. <TextView
  94. android:layout_width="wrap_content"
  95. android:layout_height="wrap_content"
  96. android:text="设置"
  97. android:textColor="#ffffff" />
  98. </LinearLayout>
  99.  
  100. </LinearLayout>

注意这里将LinearLayout中的子View  ImageButton 的clickable设置为false,这样才能使得整个LiearLayout 响应点击事件

activity_main.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. </android.support.v4.view.ViewPager>
  15.  
  16. <include layout="@layout/bottom" />
  17.  
  18. </LinearLayout>

每一个tab页面,这里只列举一个,其他的都相似

  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:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:gravity="center"
  11. android:text="This is Weixin Tab"
  12. android:textSize="30sp"
  13. android:textStyle="bold" />
  14.  
  15. </LinearLayout>

MainActivity类

  1. package com.imooc.tab01;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  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.View;
  13. import android.view.View.OnClickListener;
  14. import android.view.ViewGroup;
  15. import android.view.Window;
  16. import android.widget.ImageButton;
  17. import android.widget.LinearLayout;
  18.  
  19. public class MainActivity extends Activity implements OnClickListener {
  20.  
  21. private ViewPager mViewPager;
  22. private PagerAdapter mAdapter;
  23. private List<View> mViews = new ArrayList<View>();
    //用来保存view的数组
  24. // TAB
  25.  
  26. private LinearLayout mTabWeixin;
  27. private LinearLayout mTabFrd;
  28. private LinearLayout mTabAddress;
  29. private LinearLayout mTabSetting;
  30.  
  31. private ImageButton mWeixinImg;
  32. private ImageButton mFrdImg;
  33. private ImageButton mAddressImg;
  34. private ImageButton mSettingImg;
  35.  
  36. @Override
  37. protected void onCreate(Bundle savedInstanceState) {
  38. super.onCreate(savedInstanceState);
  39. requestWindowFeature(Window.FEATURE_NO_TITLE);
  40. setContentView(R.layout.activity_main);
  41.  
  42. initView();
  43.  
  44. initEvents();
  45.  
  46. }
  47.  
  48. private void initEvents() {
  49. mTabWeixin.setOnClickListener(this);
  50. mTabFrd.setOnClickListener(this);
  51. mTabAddress.setOnClickListener(this);
  52. mTabSetting.setOnClickListener(this);
  53.  
  54. mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
  55.  
  56. @Override
  57. public void onPageSelected(int arg0) {
  58. int currentItem = mViewPager.getCurrentItem();
  59. resetImg();
  60. switch (currentItem) {
  61. case 0:
  62. mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);
  63. break;
  64. case 1:
  65. mFrdImg.setImageResource(R.drawable.tab_find_frd_pressed);
  66. break;
  67. case 2:
  68. mAddressImg
  69. .setImageResource(R.drawable.tab_address_pressed);
  70. break;
  71. case 3:
  72. mSettingImg
  73. .setImageResource(R.drawable.tab_settings_pressed);
  74. break;
  75.  
  76. }
  77.  
  78. }
  79.  
  80. @Override
  81. public void onPageScrolled(int arg0, float arg1, int arg2) {
  82.  
  83. }
  84.  
  85. @Override
  86. public void onPageScrollStateChanged(int arg0) {
  87.  
  88. }
  89. });
  90. }
  91.  
  92. private void initView() {
  93. mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
  94. // tabs
  95. mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin);
  96. mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
  97. mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address);
  98. mTabSetting = (LinearLayout) findViewById(R.id.id_tab_settings);
  99. // ImageButton
  100. mWeixinImg = (ImageButton) findViewById(R.id.id_tab_weixin_img);
  101. mFrdImg = (ImageButton) findViewById(R.id.id_tab_frd_img);
  102. mAddressImg = (ImageButton) findViewById(R.id.id_tab_address_img);
  103. mSettingImg = (ImageButton) findViewById(R.id.id_tab_settings_img);
  104.  
  105. LayoutInflater mInflater = LayoutInflater.from(this);
  106. View tab01 = mInflater.inflate(R.layout.tab01, null);
  107. View tab02 = mInflater.inflate(R.layout.tab02, null);
  108. View tab03 = mInflater.inflate(R.layout.tab03, null);
  109. View tab04 = mInflater.inflate(R.layout.tab04, null);
  110. mViews.add(tab01);
  111. mViews.add(tab02);
  112. mViews.add(tab03);
  113. mViews.add(tab04);
  114.  
  115. mAdapter = new PagerAdapter() {
  116.  
  117. @Override
  118. public void destroyItem(ViewGroup container, int position,
  119. Object object) {
  120. container.removeView(mViews.get(position));
  121. }
  122.  
  123. @Override
  124. public Object instantiateItem(ViewGroup container, int position) {
  125. View view = mViews.get(position);
  126. container.addView(view);
  127. return view;
  128. }
  129.  
  130. @Override
  131. public boolean isViewFromObject(View arg0, Object arg1) {
  132. return arg0 == arg1;
  133. }
  134.  
  135. @Override
  136. public int getCount() {
  137. return mViews.size();
  138. }
  139. };
  140.  
  141. mViewPager.setAdapter(mAdapter);
  142.  
  143. }
  144.  
  145. @Override
  146. public void onClick(View v) {
  147. resetImg();
  148. switch (v.getId()) {
  149. case R.id.id_tab_weixin:
  150. mViewPager.setCurrentItem(0);
  151. mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);
  152. break;
  153. case R.id.id_tab_frd:
  154. mViewPager.setCurrentItem(1);
  155. mFrdImg.setImageResource(R.drawable.tab_find_frd_pressed);
  156. break;
  157. case R.id.id_tab_address:
  158. mViewPager.setCurrentItem(2);
  159. mAddressImg.setImageResource(R.drawable.tab_address_pressed);
  160. break;
  161. case R.id.id_tab_settings:
  162. mViewPager.setCurrentItem(3);
  163. mSettingImg.setImageResource(R.drawable.tab_settings_pressed);
  164. break;
  165.  
  166. default:
  167. break;
  168. }
  169. }
  170.  
  171. private void resetImg() {
  172. mWeixinImg.setImageResource(R.drawable.tab_weixin_normal);
  173. mFrdImg.setImageResource(R.drawable.tab_find_frd_normal);
  174. mAddressImg.setImageResource(R.drawable.tab_address_normal);
  175. mSettingImg.setImageResource(R.drawable.tab_settings_normal);
  176. }
  177.  
  178. }

这样就实现了即可以滑动也可以点击tab实现页面的转换

下载:链接:http://pan.baidu.com/s/1c098WLU 密码:5zou

【IMOOC学习笔记】多种多样的App主界面Tab实现方法(一)的更多相关文章

  1. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(四)

    ViewPagerIndicator+ViewPager 要想使用ViewPagerIndicator,要使用到viewPagerlibrary开源库 top.xml <?xml version ...

  2. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(三)

    FragmentPagerAdapter+ViewPager 与之前直接用ViewPager不同的是,数组里面放的不再是View,而是Fraagment; 使用FragmentPagerAdapter ...

  3. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(二)

    Fragment实现Tab 首先把activity_main.xml 文件中的ViewPager标签改成Fragment标签 <FrameLayout android:id="@+id ...

  4. 66、多种多样的App主界面Tab(1)------ ViewPager实现Tab

    <?xml version="1.0" encoding="utf-8"?> <!-- bottom.xml --> <Linea ...

  5. App主界面Tab实现方法

    ViewPager + FragmentPagerAdapter 这里模仿下微信APP界面的实现 国际惯例,先看下效果图:   activity_main.xml 布局文件: <?xml ver ...

  6. Android学习系列(23)--App主界面实现

    在上篇文章<Android学习系列(22)--App主界面比较>中我们浅略的分析了几个主界面布局,选了一个最大众化的经典布局.今天我们就这个经典布局,用代码具体的实现它. 1.预览图先看下 ...

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

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  8. Android:日常学习笔记(8)———开发微信聊天界面

    Android:日常学习笔记(8)———开发微信聊天界面 只做Nine-Patch图片 Nine-Patch是一种被特殊处理过的PNG图片,能够指定哪些区域可以被拉升,哪些区域不可以.

  9. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

随机推荐

  1. eShopOnWeb

    eShopOnWeb https://www.cnblogs.com/sheng-jie/p/9616675.html 构建现代Web应用 1.引言 eShopOnWeb是基于ASP.NET Core ...

  2. docker下安装 Oracle11gR2

    这是第二次安装,在第一次安装过程部分内容参考自如下: http://blog.sina.com.cn/s/blog_d840ff330102v4j0.html docker下oracle11g安装 h ...

  3. phpstorm win/mac git配置 破解

    http://blog.csdn.net/fenglailea/article/details/53350080 phpstorm中git配置教程: http://blog.csdn.net/knig ...

  4. Java 字符串和时间互相转化 +时间戳

    一:字符串转换成date String datatime="2015-09-22 15:16:48"; SimpleDateFormat form = new SimpleDate ...

  5. Web中的安全性问题

    根据2010年OWASP发布的Web应用程序安全风险主要是SQL注入攻击.跨网站脚本.伪造客户端请求.Cookie盗取,传输层保护不足. 1 SQL注入攻击  随着B/S框架结构在系统开发中的广泛应用 ...

  6. [转] 张凌 ARM体系架构

    很多时候我们都会对M0,M0+,M3,M4,M7,arm7,arm9,CORTEX-A系列,或者说AVR,51,PIC等,一头雾水,只知道是架构,不知道具体是什么,有哪些不同?今天查了些资料,来解解惑 ...

  7. ThreadPoolExecutor的corePoolSize和maximumPoolSize

    按照JDK文档的描述, 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程 如果池中的线程数>corePoolSize and <max ...

  8. leetcode Single Number II - 位运算处理数组中的数

    题目描述: 给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数. 题目来源: http://oj.leetcode.com/problems/single- ...

  9. 问题:PLS-00204: 函数或伪列 'EXISTS' 只能在 SQL 语句中使用;结果:PL/SQL中不能用exists函数?

    怎么写了一个语句带出这样的结果. 语句: if exists (select * from sysdatabases where name='omni') then 结果: ERROR 位于第 4 行 ...

  10. FMX 模态窗体

    FMX 模态窗体 dlg := TForm2.Create(nil);  dlg.ShowModal(procedure(ModalResult: TModalResult)  begin       ...