学习内容来自“慕课网”

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

这里学习第一种

ViewPager实现Tab

布局文件有7个,

主界面acitivity.layout

 <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"
>
<include layout="@layout/top"/> <android.support.v4.view.ViewPager
android:id="@+id/id_viewpager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=""> </android.support.v4.view.ViewPager> <include layout="@layout/bottom"/>
</LinearLayout>

activity_main.xml

头部部分top.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@drawable/title_bar"
android:layout_height="45dp"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:text="微信"
android:textColor="#ffffff"
android:textSize="20sp"
android:textStyle="bold" /> </LinearLayout>

top.xml

底部部分bottom.xml

 <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"
>
<include layout="@layout/top"/> <android.support.v4.view.ViewPager
android:id="@+id/id_viewpager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight=""> </android.support.v4.view.ViewPager> <include layout="@layout/bottom"/>
</LinearLayout>

bottom.xml

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

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

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

还有4个对应功能的layout

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="微信"
android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>

tab(相同的四个)

Mainactivity.java文件

 package com.example.viewpager_tab;

 import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Gallery.LayoutParams;
import android.widget.ImageButton;
import android.widget.LinearLayout; public class MainActivity extends Activity implements OnClickListener{ private ViewPager mViewPager;
private PagerAdapter mAdapter;
private List<View> mviews = new ArrayList<View>(); //Tab
private LinearLayout mTabweixin;
private LinearLayout mTabset;
private LinearLayout mTabfrd;
private LinearLayout mTabadd; private ImageButton mweixin_image;
private ImageButton mfrd_image;
private ImageButton madd_image;
private ImageButton mset_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main); initView(); //初始化 initEvent();//初始化事件 } private void initEvent(){
mTabweixin.setOnClickListener(this);
mTabadd.setOnClickListener(this);
mTabset.setOnClickListener(this);
mTabfrd.setOnClickListener(this); //设置view左右滑动的响应事件
mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
int currentItem = mViewPager.getCurrentItem();
resgmit();
switch (currentItem) {
case :
mweixin_image.setImageResource(R.drawable.tab_weixin_pressed);
break;
case :
madd_image.setImageResource(R.drawable.tab_address_pressed);
break;
case :
mfrd_image.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case :
mset_image.setImageResource(R.drawable.tab_settings_pressed);
break;
default:
break;
} } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
});
} private void initView(){
mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
//layout
mTabadd = (LinearLayout) findViewById(R.id.id_tab_add);
mTabfrd = (LinearLayout) findViewById(R.id.id_tab_frd);
mTabset = (LinearLayout) findViewById(R.id.id_tab_set);
mTabweixin = (LinearLayout) findViewById(R.id.id_tab_weixin); //imagebutton
mweixin_image = (ImageButton) findViewById(R.id.id_tab_weixin_image);
madd_image = (ImageButton) findViewById(R.id.id_tab_add_image);
mfrd_image = (ImageButton) findViewById(R.id.id_tab_frd_image);
mset_image = (ImageButton) findViewById(R.id.id_tab_set_image); LayoutInflater mInflater = LayoutInflater.from(this);
View tab_1 = mInflater.inflate(R.layout.tab_1, null);
View tab_2 = mInflater.inflate(R.layout.tab_2, null);
View tab_3 = mInflater.inflate(R.layout.tab_3, null);
View tab_4 = mInflater.inflate(R.layout.tab_4, null); mviews.add(tab_1);
mviews.add(tab_2);
mviews.add(tab_3);
mviews.add(tab_4); mAdapter = new PagerAdapter() { @Override
public void destroyItem(View container, int position,
Object object) {
// TODO Auto-generated method stub
((ViewPager) container).removeView(mviews.get(position)); } @Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
View view = mviews.get(position);
((ViewGroup) container).addView(view);
return view;
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return mviews.size();
}
}; mViewPager.setAdapter(mAdapter); } @Override
public void onClick(View v) {
// TODO Auto-generated method stub resgmit(); switch (v.getId()) {
case R.id.id_tab_weixin:
mViewPager.setCurrentItem();
mweixin_image.setImageResource(R.drawable.tab_weixin_pressed);
break;
case R.id.id_tab_add:
mViewPager.setCurrentItem();
madd_image.setImageResource(R.drawable.tab_address_pressed);
break;
case R.id.id_tab_frd:
mViewPager.setCurrentItem();
mfrd_image.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case R.id.id_tab_set:
mViewPager.setCurrentItem();
mset_image.setImageResource(R.drawable.tab_settings_pressed);
break; default:
break;
} } //将所有的图片切换为暗色
private void resgmit() {
// TODO Auto-generated method stub
mweixin_image.setImageResource(R.drawable.tab_weixin_normal);
madd_image.setImageResource(R.drawable.tab_address_normal);
mfrd_image.setImageResource(R.drawable.tab_find_frd_normal);
mset_image.setImageResource(R.drawable.tab_settings_normal); } }

MainActivity.java

效果图:

安卓开发_慕课网_ViewPager实现Tab(App主界面)的更多相关文章

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

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

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

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  3. 安卓开发_浅谈Fragment之ListFragment

    ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...

  4. 安卓开发_深入学习ViewPager控件

    一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...

  5. 安卓开发_浅谈ListView(SimpleAdapter数组适配器)

    安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...

  6. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

  7. 安卓开发_数据存储技术_sqlite

    一.SQLite SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用 ...

  8. 安卓开发_浅谈ListView(自定义适配器)

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...

  9. 安卓开发_数据存储技术_SharedPreferences类

    SharedPreferences类 供开发人员保存和获取基本数据类型的键值对. 该类主要用于基本类型,例如:booleans,ints,longs,strings.在应用程序结束后,数据仍旧会保存. ...

随机推荐

  1. Delphi 10.1 Berlin Starter Edition

    Delphi 10.1 Berlin Starter Edition Embarcadero® Delphi 10.1 Berlin Starter is a great way to get sta ...

  2. Lua面向对象设计

    首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了 ...

  3. MySQL单机load过高问题讨论

    有一个朋友问我: "hi,我想问下你们遇到单机load过高的情况 采取什么紧急措施啊?" 我问他是不是mysql db server? 他说是. 我给他如下建议: 1 先看下是不是 ...

  4. codeforces Fedor and New Game

    #include<iostream> #include<stack> #include<cstring> #include<cstdio> #inclu ...

  5. Web开发入门疑问收集(不定期更新)

    bootstrap container和container-fluid的区别 原始链接 container 根据显示设备满足的最小宽度,来决定实际内容宽度,是一个根据设置内容阶梯式响应的布局. 例子: ...

  6. Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)

    1    运行环境说明 1.1     硬软件环境 1.2     机器网络环境 2    :安装Eclipse并测试 2.1     内容 2.2     实现过程 2.2.1   2.2.2   ...

  7. iOS-设计模式-懒加载

    一.为什么要懒加载? 答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存.这些资源例如大量的数据,图片,音频,过多的控件等. 二.懒加 ...

  8. 参数嗅探(Parameter Sniffing)(2/2)

    在参数嗅探(Parameter Sniffing)(1/2)里,我介绍了SQL Server里参数嗅探的基本概念和背后的问题.如你所见,当缓存的计划被SQL Server盲目重用时,会带来严重的性能问 ...

  9. ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets

    jqwidgets.js: 是一个功能完整的框架,它具有专业的可触摸的jQuery插件.主题.输入验证.拖放插件.数据适配器,内置WAI-ARIA(无障碍网页应用)可访问性.国际化和MVVM模式支持. ...

  10. .NET 笔试题--自已作答

    以下题目,我已全部作答,答案仅供参考!水平和理解有限,可能有误,欢迎指正,谢谢! 1. 填空: (1)面向对象的语言具有__继承______性._____多态____性.____封装____性. (2 ...