安卓开发_慕课网_ViewPager实现Tab(App主界面)
学习内容来自“慕课网”
网站上一共有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主界面)的更多相关文章
- 安卓开发_慕课网_Fragment实现Tab(App主界面)
学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...
- 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)
学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_深入学习ViewPager控件
一.概述 ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view. ViewPager特点: ...
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 安卓开发_数据存储技术_sqlite
一.SQLite SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了.SQLite已经被多种软件和产品使用 ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_数据存储技术_SharedPreferences类
SharedPreferences类 供开发人员保存和获取基本数据类型的键值对. 该类主要用于基本类型,例如:booleans,ints,longs,strings.在应用程序结束后,数据仍旧会保存. ...
随机推荐
- Js调用Java方法并互相传参
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
- MyBatis知多少(16)MyBatis映射
之前我们详细地讨论了MyBatis背后的设计理念以及iBATIS框架是如何产生的.也说明了MyBatis是一个混合型解决方案,它从处理关系数据库的其他不同方法那里借鉴了许多思想.那么MyBatis到底 ...
- js中的执行上下文,菜鸟入门基础。
console.log(a); //Uncaught ReferenceError: a is not defined 因为没有定义a所以报错了. var a = 52; console.log(a) ...
- UVa11292
Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...
- linux VM复制多个IP配置出错的处理
device eth0 does not seem to be present, delaying initialization (2012-09-13 21:16:38) 转载▼ 标签: 杂谈 ...
- kubernetes学习笔记
docker实现了更便捷的单机容器虚拟化的管理, docker的位置处于操作系统层与应用层之间; 相对传统虚拟化(KVM,XEN): docker可以更加灵活的去实现一些应用层功能, 同时对资源的利用 ...
- php分享三十三:常量
一:常量定义 1:在脚本执行期间该值不能改变(除了所谓的魔术常量,它们其实不是常量) 2:常量默认为大小写敏感 3:命名规则:用正则表达式是这样表达的:[a-zA-Z_\x7f-\xff][a-zA- ...
- BEA-150021 - The admin server failed to authenticate the identity of the user username starting the managed server.
原因:用户名.密码错误. 解决方法:修改boot.properties用户名密码为明文方式,然后重新启动就OK了,自动加密.
- [Node.js] 使用File API 异步上传文件
原文地址:http://www.moye.me/2014/11/05/html5-filereader/ 最近在做一个网盘的项目,不出意外的涉及到大文件的上传,那么问题来了:如何实时的显示文件上传的进 ...
- iOS-NSDate
一.概念解释 1.什么是NSTimeZone? NSTimeZone:时区是一个地理名字,是为了克服各个地区或者国家之间在时间上的混乱设定的. 1).GMT:0:00格林威治标准时间:UTC +00: ...