IOS开发之绝对布局和相对布局(屏幕适配)&转&
IOS开发之绝对布局和相对布局(屏幕适配)之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便。在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处。下面会结合两个小demo来学习一下我们IOS开发中UI的绝对定位和相对定位。在前面的博客中所用到的UI事例用的全是绝对定位,用我们Storyboard拖拽出来的控件全是绝对定位的,就是我们可以同改变组件的frame来改变组件的位置和大小。而相对定位则不同,相对定位是参考组件周围的元素来确定组件的大小或位置,相对定位即约束和周围组件的距离来布局的,即layoutConstraint. 在布局中LayoutConstraint和Fram布局方式是不能并存的。&& & & & 上面说了这么多了,可能说的不太明白,还是那句话,怎么能少的了代码和实例的支持呢,下面会通过屏幕适配的事例来用绝对布局和相对布局同时实现下面的描述效果。&& & & & 我们要实现的效果:当上面的view的大小及位置改变时,为了不覆盖掉下面的view,我们同时要改变下view的位置。 或者说在我们4.0寸正常显示的内容,在3.5寸屏上也能正常显示,即通常我们所说的屏幕的适配。为了便于观察效果,我们可以用Slider控件来动态的改变上面view的大小,观察下面view的位置变化,下面是我们要实现的效果图:&& & & & & & & & & & & & & & & & & & & & & & & & & & & &&&&& & & & 1.用绝对布局来实现上述效果,为了节省我们代码编写的时间,上面的控件是通过storyborad来实现的,然后在对应的ViewController里添加组件和控件回调的方法,主要是在slider滑动的时候来获取slider的值,然后动态的设置上面View的frame坐标(当然,如果让view往四周扩展得计算一下新的fram的值,然后动态的修改),上面的view位置和大小改变了,那么下面的view不能被上面的覆盖掉,所以也得修改blackView的fram的值。这种通过修改frame的值的方式来确定组件位置即为绝对布局&& & & & 下面是由storyboard拖拽过来的属性:&&//把最上边的view拖拽到我们的代码中@property (strong, nonatomic) IBOutlet UIView *myV//添加slider@property (strong, nonatomic) IBOutlet UISlider *myS//添加下面黑色的view@property (strong, nonatomic) IBOutlet UIView *blackV& & & & 下面是当slider的值改变时要回调的方法:&&//当slider的值改变的时候回调的方法- (IBAction)sliderFunction:(id)sender{& & //获取slider的当前值(在storyboard设置的范围为0-120)& & double value = self.mySlider.&& & //获取myView的位置& & CGRect frame = self.myView.&& & //根据slider的值动态的设置myView的坐标和宽高,设置的时候view中心不变& & frame.origin.x = &120-& & frame.origin.y = 66 * (1-value/120);& & frame.size.height = 320-frame.origin.x*2;& & frame.size.width = 320-frame.origin.x*2;&& & //更新myView的位置& & self.myView.frame =& & //同时改变下面黑色view的坐标& & CGRect bf = self.blackView.& & bf.origin.y = frame.size.height + frame.origin.y + 30;& & self.blackView.frame =&}&&& & & & 2.上面是我们的绝对布局的方式,接下来要学习一下相对布局的方式。相对布局使用起来会比绝对布局要复杂一些,下面先做屏幕适配的例子,图一是在iPhone的4.0寸的效果图, 当我们不做任何处理的时候在3.5寸屏上是显示不出来的如第二张图:&& & & & & & & & & & & & &&& & & & & & (1)我们如何让在3.5寸屏上也显示正常呢,接下啦就是相对布局出出场的时候了,我们用相对布局的方式把最下面的view的位置改为相对于主视图的底部和左边的像素值固定,同时设置slider的位置相对于下面的view的位置相对固定。也就是下面的veiw的位置改变,则上面的slider的位置也会改变,用storyboard修改如下:(第一张图是修改最下面view的相对位置,第二张图是设置我们slider为相对布局) ,不需要在ViewController中添加任何动态吗我们就可以实现屏幕的适配。&& & & & & & & & & & & &&&& &&&& & & & (2)那么我如何用相对布局实现上面那种view放大的效果呢,接下来我们需要新建一个工程,因为相对布局和绝对布局在同一个组件中无法并存。在新建工程中用storyboard把我们用到的控件进行拖拽 ,界面和上面的是一样的。&& & & & & & & & & & (1)首先给我们最上面的View设置相对布局的属性,如下面的图一&& & & & & & & & & & (2) &再给黑色的View设置相对布局的属性,入下面的图二所示:&& & & & & & & & & & (3) 设置上面两个View相对中心对齐,选中上面的View,按着Ctrl往下面的View中拖拽,在弹出的框中选中Center X入图三&& & & & & & & & & & & & & & & &&& & & & & & & & (4).给我们相应的组件在storyboard中添加上约束以后,怎样来动态的改变最上面view的宽和高的约束范围呢?(即改变水平约束和垂直约束的值)第一部就得把最上面的view的水平约束和垂直约束从我们的storyboard中把最上面View中我们要用的约束拖入到我们的Viewcontroller, 第一张图是storyboard中约束所在的位置,第二张图把约束添加到ViewController中。& && &
& & & & &(5)至此我们用storyboard的工作已经做完,程序员是少不了敲代码的,也只有正儿八经的敲代码,程序员才会成长。所以喽下面就是我们在ViewController中添加的代码部分。绝对布局直接改frame的坐标值就可以啦,那么在程序中我们如何去动态的改变我们约束的值呢?下面的代码将会用到。 我们要做的事情就是在ViewController中通过改变slider的值来改变最上面View的水平约束和垂直约束,水平约束和垂直约束的相关变量我们已经拖拽过来了,下面就需要在Slider回调的方法中来改变水平和垂直约束的值。先段代码,之后在说两句。 & & & &&&//slider的值改变调用的方法- (IBAction)sliderChange:(id)sender{& & //为了避免冲突移除myView的水平和垂直约束,注意是从主视图上移除,因为约束是加载我们的主视图上,即相对于我们的主视图& & [self.view removeConstraint:self.widthC];& & [self.view removeConstraint:self.heightC];& & && & //获取slider的值& & double sliderValue = self.mySlider.& & && & //由slider的值重设我们的约束值,H代表水平约束, V代表垂直约束& & NSString *widthValue = [NSString stringWithFormat:@&H:[_myView(%lf)]&, sliderValue];& & NSString *heightValue = [NSString stringWithFormat:@&V:[_myView(%lf)]&, sliderValue];& & && & //新建约束& & NSArray *widthConstraint = [NSLayoutConstraint constraintsWithVisualFormat:widthValue options:0 metrics:nil views:NSDictionaryOfVariableBindings(_myView)];& & //给水平约束重新赋值& & self.widthC = widthConstraint[0];& & && & //给垂直约束重新赋值& & NSArray * heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:heightValue options:0 metrics:nil views:NSDictionaryOfVariableBindings(_myView)];& & self.heightC = heightConstraint[0];& & && & //往主视图上添加新的约束& & [self.view addConstraint:self.widthC];& & [self.view addConstraint:self.heightC];}& &
& & & &代码说明:&& &
& & & & & & & &1.一个组件中只能有一中约束,如在myView中我们已经有一个垂直约束,我们如果再给他添加一个垂直约束的话,那么程序在运行时就会报错,错误内容:“Unable to simultaneously satisfy constraints.……”;&& &
& & & & & & & &2.所以在添加新的约束之前,我们得把之前加在我们组件中相应的约束给去掉;约束是加在我们对应组件的父视图上,移除也得从组件的父视图上移除;&& &
& & & & & & & &3.在设置约束的值的时候我们是以字符串的形式把参数传递给约束的,如:H:[_myView(200)] H代表水平约束,V代表垂直约束。中括号里是我们要为那个组件添加约束以及约束的值是多少;&& &
& & & & & & & &4.给我们的约束更新我们新建的约束;&& &
& & & & & & & &5.在把更新的约束添加到我们的父视图上,到此我们就可以实现上面我们上面用绝对布局实现的功能&& &
& & & &补充说明:&& &
& & & & & & & &在绝对布局时我们还可以获取屏幕的尺寸,通过屏幕的尺寸来计算我们组件所在的位置,主要代码如下:&&//获取屏幕大小UIScreen *s = [UIScreen mainScreen];//获取屏幕边界CGRect bounds = s.//获取屏幕的高度float height = bounds.size.
最新教程周点击榜
微信扫一扫HTML常用标签&二&
8.表单与表单元素表单的作用:实现浏览器与服务器之间数据交互&form action=&url& method=&get|post& name=&form_login& enctype=&application/x-www-form-urlencoded|multipart/form-data有文件域时,表单数据在传递之前浏览器对其编码的方式&&&/form&:创建表单,表示一组表单数据的容器URL:get方式 http://localhost:8080/user/login.jsp?username=123&password=8888.1表单元素&input /&标签可以创建文本框、密码框、单选按钮、复选框、文件域、隐藏域、提交按钮、重置按钮、自定义命令按钮、图像按钮等。表单元素几个重要的属性:&name:只有设置name的表单元素的名称的,才能参与表单提交disabled:禁用表单元素,它使浏览者无法操作。被禁用的表单元素不参与表单提交readonly:使表单元素的数据无法被浏览者更改文本框 &input type=&text& /&密码框 &input type=&password& /&单选按钮&input type=&radio& name=&sex& value=&man& /&男&input type=&radio& name=&sex& value=&woman& /&复选框 兴趣爱好:&input id=&chkTravel& type=&checkbox& name=&chkHobies& value=&travel& checked=&checked& /& 旅行&&&input id=&chkGame& type=&checkbox& name=&chkHobies& value=&game& &/& 游戏&&input id=&chkShopping& type=&checkbox& name=&chkHobies& value=&shopping& checked=&checked& /& 购物文件域 相片:&input id=&filePhoto& type=&file& name=&filePhoto& accept=&设置文件域可接受的文件类型& /&隐藏域 &input id=&hidUid& type=&hidden& name=&uid& value=&2001& /&提交按钮 &input type=&submit& value=&注册& /&重置按钮 &input type=&reset& value=&重置& /&自定义按钮 &input type=&button& name=&登录& onclick=&login();&/&图像按钮 &input type=&image& src=& alt=&你好& value=&提交& onclick=&login_check();& width=&20px& height=&20px& & /&&button&&/button&标签按钮&button id=&btn& name=&btn_tijiao& type=&button|submit|reset& value=&表单提交时,此按钮要发送的数据。注意:此属性对IE浏览器无效,表单提交时IE浏览器会将标签之间的文本作为此按钮的数据发送给服务器& disabled=&disabled& &&/button&多行文本域&&textarea rows=&4& cols=&4& id=&text& wrap=&Off不自动换行。文本区只有一行文本,除非浏览者回车强制换行|virtual虚拟换行。一行文本的宽度即将超出多行文本框宽度时自动换行,但在自动换行处不产生任何标志|physical物理换行。与虚拟换行相对,产生换行标志& &nihao&/textarea&&input type=&button& onclick=&login();&&获取多行文本域中的值&script type=&text/javascript&&function login(){alert(document.getElementById(&text&).firstChild.nodeValue);}&/script&列表框&select id=&sltLesson& name=&lesson& &size=&3显示几条列表项& multiple=&multiple设置列表框的选项可以多选& disabled=&disabled禁用此列表框& &&option value=&0& selected=&selected默认选中&&----请选择---&/option&&option&语文&/option&&optgroup label=&初中& &&option value=&1& &地理&/option&&option value=&2&&生物&/option&&/optgroup&&/select&&lable for=&txtName&&&/lable& 标签:说明文字for属性的值与元素的id相对应,功能是将此标签与该元素绑定在一起,这种绑定方式是显示绑定&input id=&redio_sex& type=&radio& name=&sex& value=&man& /&&lable for=&redio_sex&&男&/lable&隐式绑定&lable&&input id=&redio_sex& type=&radio& name=&sex& value=&man& /&男&/lable&&fieldset&&/fieldset&&legend&&/legend&标签fieldset标签用于将表单内的多个表单元素分成多个组,而legend标签则用于为每个组提供一个标题&表单用于浏览器和WEB服务器之间进行交互表单提交指浏览器将表单内部表单元素的数据发送到web服务器端。表单数据提交到哪个程序处理由表单的action属性设置,浏览器以哪种方式提交表单数据由表单的method属性设置
最新教程周点击榜
微信扫一扫Android实战简易教程&十八&(ViewPager组件详解)
对于ViewPager组件我们知道:& 1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。& 2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。& 3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。下面我们通过实例看一下ViewPager的使用。一 实现ViewPager(数据源为List&View&)1.先在main.xml文件中添加一个ViewPager:[html]&view plaincopy&LinearLayout&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&&&&&&android.support.v4.view.ViewPager&&&&&&&&&&android:id=&@+id/pager&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&/android.support.v4.view.ViewPager&&&&&&/LinearLayout&&&2.创建三个View:[html]&view plaincopy&?xml&version=&1.0&&encoding=&utf-8&?&&&&LinearLayout&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&android:orientation=&vertical&&&&&&&&&&&&TextView&&&&&&&&&&android:id=&@+id/txt1&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:layout_gravity=¢er&&&&&&&&&&&android:textSize=&25dp&&&&&&&&&&&android:text=&第一页&&&&&&&&&&/TextView&&&&&&/LinearLayout&&&[html]&view plaincopy&?xml&version=&1.0&&encoding=&utf-8&?&&&&LinearLayout&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&android:orientation=&vertical&&&&&&&&&&&&TextView&&&&&&&&&&android:id=&@+id/txt2&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:text=&第二页&&&&&&&&&&/TextView&&&&&&&&&&/LinearLayout&&&&?xml version=&1.0& encoding=&utf-8&?&&LinearLayout xmlns:android=&/apk/res/android&& & android:layout_width=&match_parent&& & android:layout_height=&match_parent&& & android:orientation=&vertical& && &&& & &TextView& & & & android:id=&@+id/txt3&& & & & android:layout_width=&wrap_content&& & & & android:layout_height=&wrap_content&& & & & android:text=&第三页& && & &/TextView&& &&&/LinearLayout&3.创建一个ViewPager适配器类:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.support.v4.view.PagerA&&import&android.view.V&&import&android.view.ViewG&&&&public&class&ViewPagerAdapter&extends&PagerAdapter&{&&&&&&private&List&View&&lViews=new&ArrayList&View&();&&&&&&&&&&&&public&ViewPagerAdapter(List&View&&lViews){&&&&&&&&&&this.lViews=lV&&&&&&}&&&&&&&&@Override&&&&&&public&int&getCount()&{&&&&&&&&&&return&lViews.size();&&&&&&}&&&&&&&&@Override&&&&&&public&boolean&isViewFromObject(View&arg0,&Object&arg1)&{&&&&&&&&&&return&arg0==arg1;&&&&&&}&&&&&&@Override&&&&&&public&Object&instantiateItem(ViewGroup&container,&int&position)&{&&&&&&&&&&container.addView(lViews.get(position));&&&&&&&&&&return&lViews.get(position);&&&&&&}&&&&&&@Override&&&&&&public&void&destroyItem(ViewGroup&container,&int&position,&Object&object)&{&&&&&&&&&&container.removeView(lViews.get(position));&&&&&&}&&&&}&&4.MainActivity.java:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.support.v7.app.ActionBarA&&import&android.support.v7.app.ActionB&&import&android.support.v4.app.F&&import&android.support.v4.view.PagerA&&import&android.support.v4.view.ViewP&&import&android.os.B&&import&android.view.LayoutI&&import&android.view.M&&import&android.view.MenuI&&import&android.view.V&&import&android.view.ViewG&&import&android.view.W&&import&android.os.B&&&&public&class&MainActivity&extends&ActionBarActivity&{&&&&&&private&ViewPager&viewP&&&&&&private&List&View&&listViews=null;&&&&&&ViewPagerAdapter&pagerA&&&&&&&&@Override&&&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&requestWindowFeature(Window.FEATURE_NO_TITLE);&&&&&&&&&&setContentView(R.layout.activity_main);&&&&&&&&&&&&&&&&&&&&viewPager=(ViewPager)&findViewById(R.id.pager);&&&&&&&&&&listViews=new&ArrayList&View&();&&&&&&&&&&/**&&&&&&&&&&*&为Adapter创建数据源&&&&&&&&&&*/&&&&&&&&&&View&view1=View.inflate(this,&R.layout.view1,&null);&&&&&&&&&&View&view2=View.inflate(this,&R.layout.view2,&null);&&&&&&&&&&View&view3=View.inflate(this,&R.layout.view3,&null);&&&&&&&&&&listViews.add(view1);&&&&&&&&&&listViews.add(view2);&&&&&&&&&&listViews.add(view3);&&&&&&&&&&pagerAdapter=new&ViewPagerAdapter(listViews)&;&&&&&&&&&&viewPager.setAdapter(pagerAdapter);&&&&&&&&}&&&&}&&5.运行实例:可以实现翻页效果。二 添加标题1.我们需要更改main.xml文件:[html]&view plaincopy&LinearLayout&xmlns:android=&/apk/res/android&&&&&&&android:layout_width=&match_parent&&&&&&&android:layout_height=&match_parent&&&&&&&&&&&&android.support.v4.view.ViewPager&&&&&&&&&&android:id=&@+id/pager&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&android:layout_gravity=¢er&&&&&&&&&&&&&&&&android.support.v4.view.PagerTabStrip&&&&&&&&&&&&&&android:id=&@+id/strip&&&&&&&&&&&&&&&android:layout_width=&wrap_content&&&&&&&&&&&&&&&android:layout_height=&wrap_content&&&&&&&&&&&&&&&android:layout_gravity=&top&&&&&&&&&&&&&&/android.support.v4.view.PagerTabStrip&&&&&&&&/android.support.v4.view.ViewPager&&&&&&/LinearLayout&&&2.需要更改适配器文件:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.support.v4.view.PagerA&&import&android.view.V&&import&android.view.ViewG&&&&public&class&ViewPagerAdapter&extends&PagerAdapter&{&&&&&&private&List&View&&lViews=new&ArrayList&View&();&&&&&&private&List&String&&titleList=new&ArrayList&String&();&&&&&&&&&&&&public&ViewPagerAdapter(List&View&&lViews,List&String&&titleList){&&&&&&&&&&this.lViews=lV&&&&&&&&&&this.titleList=titleL&&&&&&}&&&&&&&&@Override&&&&&&public&int&getCount()&{&&&&&&&&&&return&lViews.size();&&&&&&}&&&&&&&&@Override&&&&&&public&boolean&isViewFromObject(View&arg0,&Object&arg1)&{&&&&&&&&&&return&arg0==arg1;&&&&&&}&&&&&&@Override&&&&&&public&Object&instantiateItem(ViewGroup&container,&int&position)&{&&&&&&&&&&container.addView(lViews.get(position));&&&&&&&&&&return&lViews.get(position);&&&&&&}&&&&&&@Override&&&&&&public&void&destroyItem(ViewGroup&container,&int&position,&Object&object)&{&&&&&&&&&&container.removeView(lViews.get(position));&&&&&&}&&&&&&/**&&&&&&*&标题&&&&&&*/&&&&&&@Override&&&&&&public&CharSequence&getPageTitle(int&position)&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&return&titleList.get(position);&&&&&&}&&&&}&&3.需要更改MainActivity.java文件:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.support.v7.app.ActionBarA&&import&android.support.v7.app.ActionB&&import&android.support.v4.app.F&&import&android.support.v4.view.PagerA&&import&android.support.v4.view.PagerTabS&&import&android.support.v4.view.ViewP&&import&android.os.B&&import&android.view.LayoutI&&import&android.view.M&&import&android.view.MenuI&&import&android.view.V&&import&android.view.ViewG&&import&android.view.W&&import&android.os.B&&&&public&class&MainActivity&extends&ActionBarActivity&{&&&&&&private&ViewPager&viewP&&&&&&private&List&View&&listViews=null;&&&&&&ViewPagerAdapter&pagerA&&&&&&PagerTabStrip&pagerTabS&&&&&&private&List&String&&titleL&&&&&&&&@Override&&&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&requestWindowFeature(Window.FEATURE_NO_TITLE);&&&&&&&&&&setContentView(R.layout.activity_main);&&&&&&&&&&&&&&&&&&&&viewPager=(ViewPager)&findViewById(R.id.pager);&&&&&&&&&&pagerTabStrip=(PagerTabStrip)&findViewById(R.id.strip);&&&&&&&&&&listViews=new&ArrayList&View&();&&&&&&&&&&titleList=new&ArrayList&String&();&&&&&&&&&&titleList.add(&第一页&);&&&&&&&&&&titleList.add(&第二页&);&&&&&&&&&&titleList.add(&第三页&);&&&&&&&&&&/**&&&&&&&&&&*&为Adapter创建数据源&&&&&&&&&&*/&&&&&&&&&&View&view1=View.inflate(this,&R.layout.view1,&null);&&&&&&&&&&View&view2=View.inflate(this,&R.layout.view2,&null);&&&&&&&&&&View&view3=View.inflate(this,&R.layout.view3,&null);&&&&&&&&&&listViews.add(view1);&&&&&&&&&&listViews.add(view2);&&&&&&&&&&listViews.add(view3);&&&&&&&&&&pagerAdapter=new&ViewPagerAdapter(listViews,titleList)&;&&&&&&&&&&viewPager.setAdapter(pagerAdapter);&&&&&&&&}&&&&}&&4.运行实例如下:三 实现ViewPager(数据源为List&Fragment&)1.首先我们要创建三个Fragment:[html]&view plaincopypackage&com.yayun.&&&&import&android.os.B&&import&android.support.v4.app.F&&import&android.view.LayoutI&&import&android.view.V&&import&android.view.ViewG&&&&public&class&Fragment1&extends&Fragment&{&&&&&&@Override&&&&&&public&View&onCreateView(LayoutInflater&inflater,&ViewGroup&container,&&&&&&&&&&&&&&Bundle&savedInstanceState)&{&&&&&&&&&&return&inflater.inflate(R.layout.view1,&container,&false);&&&&&&}&&&&}&&[java]&view plaincopypackage&com.yayun.&&&&import&android.os.B&&import&android.support.v4.app.F&&import&android.view.LayoutI&&import&android.view.V&&import&android.view.ViewG&&&&public&class&Fragment2&extends&Fragment&{&&&&&&@Override&&&&&&public&View&onCreateView(LayoutInflater&inflater,&ViewGroup&container,&&&&&&&&&&&&&&Bundle&savedInstanceState)&{&&&&&&&&&&return&inflater.inflate(R.layout.view2,&container,&false);&&&&&&}&&&&}&&[java]&view plaincopypackage&com.yayun.&&&&import&android.os.B&&import&android.support.v4.app.F&&import&android.view.LayoutI&&import&android.view.V&&import&android.view.ViewG&&&&public&class&Fragment3&extends&Fragment&{&&&&&&@Override&&&&&&public&View&onCreateView(LayoutInflater&inflater,&ViewGroup&container,&&&&&&&&&&&&&&Bundle&savedInstanceState)&{&&&&&&&&&&return&inflater.inflate(R.layout.view3,&container,&false);&&&&&&}&&&&}&&2.设置Adapter:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.L&&&&import&android.support.v4.app.F&&import&android.support.v4.app.FragmentM&&import&android.support.v4.app.FragmentPagerA&&&&public&class&MyFragmentPagerAdapter&extends&FragmentPagerAdapter&{&&&&&&List&Fragment&&fragmentsL&&&&&&List&String&&titleL&&&&&&&&public&MyFragmentPagerAdapter(FragmentManager&fm,List&Fragment&&fragmentsList,List&String&&titleList)&{&&&&&&&&&&super(fm);&&&&&&&&&&this.fragmentsList=fragmentsL&&&&&&&&&&this.titleList=titleL&&&&&&}&&&&&&&&@Override&&&&&&public&Fragment&getItem(int&arg0)&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&return&fragmentsList.get(arg0);&&&&&&}&&&&&&&&@Override&&&&&&public&int&getCount()&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&return&fragmentsList.size();&&&&&&}&&@Override&&/**&&*&添加标题&&*/&&public&CharSequence&getPageTitle(int&position)&{&&&&&&//&TODO&Auto-generated&method&stub&&&&&&return&titleList.get(position);&&}&&&&}&&3.MainActivity.java:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.graphics.C&&import&android.os.B&&import&android.support.v4.app.F&&import&android.support.v4.view.PagerTabS&&import&android.support.v4.view.ViewP&&import&android.support.v4.view.ViewPager.PageT&&import&android.support.v7.app.ActionBarA&&import&android.view.V&&import&android.view.W&&&&public&class&MainActivity&extends&ActionBarActivity&{&&&&&&private&ViewPager&viewP&&&&&&private&List&View&&listViews=null;&&&&&&ViewPagerAdapter&pagerA&&&&&&PagerTabStrip&pagerTabS&&&&&&private&List&String&&titleL&&&&&&private&List&Fragment&&fragmentsL&&&&&&MyFragmentPagerAdapter&myFragmentPagerA&&&&&&&&@Override&&&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&requestWindowFeature(Window.FEATURE_NO_TITLE);&&&&&&&&&&setContentView(R.layout.activity_main);&&&&&&&&&&&&&&&&&&&&viewPager=(ViewPager)&findViewById(R.id.pager);&&&&&&&&&&pagerTabStrip=(PagerTabStrip)&findViewById(R.id.strip);&&&&&&&&&&&&&&&&&&&&/**&&&&&&&&&&*&设置PagerTabStrip属性&&&&&&&&&&*/&&&&&&&&&&pagerTabStrip.setBackgroundColor(Color.GREEN);&&&&&&&&&&pagerTabStrip.setDrawFullUnderline(false);&&&&&&&&&&pagerTabStrip.setTextColor(Color.WHITE);&&&&&&&&&&listViews=new&ArrayList&View&();&&&&&&&&&&titleList=new&ArrayList&String&();&&&&&&&&&&fragmentsList=new&ArrayList&Fragment&();&&&&&&&&&&fragmentsList.add(new&Fragment1());&&&&&&&&&&fragmentsList.add(new&Fragment2());&&&&&&&&&&fragmentsList.add(new&Fragment3());&&&&&&&&&&titleList.add(&第一页&);&&&&&&&&&&titleList.add(&第二页&);&&&&&&&&&&titleList.add(&第三页&);&&&&&&&&&&/**&&&&&&&&&&*&为Adapter创建数据源&&&&&&&&&&*/&&&&&&&&&&View&view1=View.inflate(this,&R.layout.view1,&null);&&&&&&&&&&View&view2=View.inflate(this,&R.layout.view2,&null);&&&&&&&&&&View&view3=View.inflate(this,&R.layout.view3,&null);&&&&&&&&&&listViews.add(view1);&&&&&&&&&&listViews.add(view2);&&&&&&&&&&listViews.add(view3);&&&&&&&&&&pagerAdapter=new&ViewPagerAdapter(listViews,titleList)&;&&&&&&&&&&myFragmentPagerAdapter=new&MyFragmentPagerAdapter(getSupportFragmentManager(),&fragmentsList,&titleList);&&&&&&&&&&//viewPager.setAdapter(pagerAdapter);&&&&&&&&&&viewPager.setAdapter(myFragmentPagerAdapter);&&&&&&&&}&&&&}&&4.运行实例:这种方法不会销毁不在当前页面的页面,不能实现页卡的创建和销毁。四 实现ViewPager(数据源为List&Fragment&实现FargmentStatePagerAdapter)常用改变Adapter:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.L&&&&import&android.support.v4.app.F&&import&android.support.v4.app.FragmentM&&import&android.support.v4.app.FragmentPagerA&&import&android.support.v4.app.FragmentStatePagerA&&import&android.view.V&&&&public&class&MyFragmentPagerAdapter2&extends&FragmentStatePagerAdapter&{&&&&&&List&Fragment&&fragmentsL&&&&&&List&String&&titleL&&&&&&&&public&MyFragmentPagerAdapter2(FragmentManager&fm,List&Fragment&&fragmentsList,List&String&&titleList)&{&&&&&&&&&&super(fm);&&&&&&&&&&this.fragmentsList=fragmentsL&&&&&&&&&&this.titleList=titleL&&&&&&}&&&&&&&&@Override&&&&&&public&Fragment&getItem(int&arg0)&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&return&fragmentsList.get(arg0);&&&&&&}&&&&&&&&@Override&&&&&&public&int&getCount()&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&return&fragmentsList.size();&&&&&&}&&@Override&&/**&&*&添加标题&&*/&&public&CharSequence&getPageTitle(int&position)&{&&&&&&//&TODO&Auto-generated&method&stub&&&&&&return&titleList.get(position);&&}&&@Override&&public&Object&instantiateItem(View&container,&int&position)&{&&&&&&//&TODO&Auto-generated&method&stub&&&&&&return&super.instantiateItem(container,&position);&&}&&@Override&&public&void&destroyItem(View&container,&int&position,&Object&object)&{&&&&&&//&TODO&Auto-generated&method&stub&&&&&&super.destroyItem(container,&position,&object);&&}&&&&}&&将MainActivity.java中的Adapter换一下即可,它可以实现页卡的创建和销毁。五 &onPagerChangeListener ***使用只需要修改MainActivity.java:[java]&view plaincopypackage&com.yayun.&&&&import&java.util.ArrayL&&import&java.util.L&&&&import&android.graphics.C&&import&android.os.B&&import&android.support.v4.app.F&&import&android.support.v4.view.PagerTabS&&import&android.support.v4.view.ViewP&&import&android.support.v4.view.ViewPager.OnPageChangeL&&import&android.support.v4.view.ViewPager.PageT&&import&android.support.v7.app.ActionBarA&&import&android.view.V&&import&android.view.W&&import&android.widget.T&&&&public&class&MainActivity&extends&ActionBarActivity&implements&OnPageChangeListener&{&&&&&&private&ViewPager&viewP&&&&&&private&List&View&&listViews=null;&&&&&&ViewPagerAdapter&pagerA&&&&&&PagerTabStrip&pagerTabS&&&&&&private&List&String&&titleL&&&&&&private&List&Fragment&&fragmentsL&&&&&&MyFragmentPagerAdapter&myFragmentPagerA&&&&&&&&@Override&&&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&requestWindowFeature(Window.FEATURE_NO_TITLE);&&&&&&&&&&setContentView(R.layout.activity_main);&&&&&&&&&&&&&&&&&&&&viewPager=(ViewPager)&findViewById(R.id.pager);&&&&&&&&&&pagerTabStrip=(PagerTabStrip)&findViewById(R.id.strip);&&&&&&&&&&&&&&&&&&&&/**&&&&&&&&&&*&设置PagerTabStrip属性&&&&&&&&&&*/&&&&&&&&&&pagerTabStrip.setBackgroundColor(Color.GREEN);&&&&&&&&&&pagerTabStrip.setDrawFullUnderline(false);&&&&&&&&&&pagerTabStrip.setTextColor(Color.WHITE);&&&&&&&&&&listViews=new&ArrayList&View&();&&&&&&&&&&titleList=new&ArrayList&String&();&&&&&&&&&&fragmentsList=new&ArrayList&Fragment&();&&&&&&&&&&fragmentsList.add(new&Fragment1());&&&&&&&&&&fragmentsList.add(new&Fragment2());&&&&&&&&&&fragmentsList.add(new&Fragment3());&&&&&&&&&&titleList.add(&第一页&);&&&&&&&&&&titleList.add(&第二页&);&&&&&&&&&&titleList.add(&第三页&);&&&&&&&&&&/**&&&&&&&&&&*&为Adapter创建数据源&&&&&&&&&&*/&&&&&&&&&&View&view1=View.inflate(this,&R.layout.view1,&null);&&&&&&&&&&View&view2=View.inflate(this,&R.layout.view2,&null);&&&&&&&&&&View&view3=View.inflate(this,&R.layout.view3,&null);&&&&&&&&&&listViews.add(view1);&&&&&&&&&&listViews.add(view2);&&&&&&&&&&listViews.add(view3);&&&&&&&&&&pagerAdapter=new&ViewPagerAdapter(listViews,titleList)&;&&&&&&&&&&myFragmentPagerAdapter=new&MyFragmentPagerAdapter(getSupportFragmentManager(),&fragmentsList,&titleList);&&&&&&&&&&//viewPager.setAdapter(pagerAdapter);&&&&&&&&&&viewPager.setAdapter(myFragmentPagerAdapter);&&&&&&&&&&viewPager.setOnPageChangeListener(this);//加载***器&&&&&&&&}&&&&&&&&@Override&&&&&&public&void&onPageScrollStateChanged(int&arg0)&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&&&&&&&}&&&&&&&&@Override&&&&&&public&void&onPageScrolled(int&arg0,&float&arg1,&int&arg2)&{&&&&&&&&&&//&TODO&Auto-generated&method&stub&&&&&&&&&&&&&&&&}&&&&&&&&@Override&&&&&&public&void&onPageSelected(int&arg0)&{&&&&&&&&&&Toast.makeText(this,&&当前页面为&+(arg0+1),&Toast.LENGTH_SHORT).show();&&&&&&&&&&&&&&&&}&&&&}&&运行实例即可以显示当前页面标签。总结1.android.support.v4.view.ViewPager全名;2.android.support.v4.view.PagerTabStrip作为标题名称
最新教程周点击榜
微信扫一扫