文章目录
Android
安卓开发者指南:https://developer.android.google.cn/guide
1 Fragment
1.1 概述
设计思想:
为了解决不同分辨率的终端适配问题,简化Activity。
Fragment VS Activity
1.Fragment是到Android3.0+以后
2.一个Activity可以运行多个Fragment
3.Fragment不能脱离Activity而存在
4.Activity是屏幕的主体,而Fragment是Activity的一个组成元素
1.2 生命周期
当Fragment从创建到运行时回调的生命周期方法有:
- onAttach():当 Fragment依附到Activity时调用的方法
- onCreate():当Fragment创建时调用的方法
- onCreateView():给Fragment加载布局时调用的方法
- onActivityCreated():当该Fragment依附的Activity 创建时调用的方法
- onStart():当 Fragment启动时调用的方法
- onResume():当 Fragment正在运行时调用的方法
当Fragment不在使用时调用的生命周期方法:onPause();
当Fragment不在交互时调用该方法:onStop();
当Fragment不再可见时调用该方法:onDestroyView();
销毁Fragment布局时调用的方法:onDestroy();
当Frament销毁时调用的方法:onDetach();当Fragment完全脱离Fragment时调用的方法
1.3 静态、动态加载
1.3.1 静态加载:XML
![](https://i-blog.csdnimg.cn/blog_migrate/78f5c0a79d87c147ebcd987c31568bd4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/835846aff6d44bdebfa9fa48c1e8d8a3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f2f00f939bf4f1175577fb4c5b963e2f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/be78215177f66f10b9cfa33f39ff2cae.png)
在onCreateView中可以写很多、很复杂的layout,进行模块化。
静态加载核心,直接写在布局里。fragment好处:模块化,可重用,适配
1.3.2 动态加载:java code
好处:优势更大,灵活
动态切换实例
add
remove
replace
1.4 传值
Activity->Fragment:setArguments
Fragment->Activity:Callback回调
MainActivity实现上面定义的接口ListFragment.OnTitleClickListener,重写onClick()方法:
2 ViewPager导航效果
应用场景:
1.引导界面、相册多图片预览
2.多Tab页面、App导航
3.广告播放展示
应用背景:
1.android.support.v4.view.ViewPager
2.Names: V4 v7 v8 v13 v17 etc.
3.Android Support Libraries
4.如何引入( jar or aar? )
概念介绍:
1.List< View> || List< Fragment>
2.PageAdapter || FragmentPageAdapter
3.Show me the code
代码实现:
这是三个文本左右滑动展示,如果改成图片,只需要修改初始化数据的循环为图片:
实现导航的那个点,动态添加:
设置adapter,这是设置的默认初始的位置:
动态出现三个点,但是不知道是哪一个,就要在当前的那个位置上改变一张图片 看效果:
Fragment配合ViewPager
TestFragment.java:extends Fragment
ViewPager实践的三种效果
1.引导界面ViewPager图片浏览器
2.FragmentPageAdapter
3.常见Tab切换效果
实现底部导航:
控件:TabHost
标签TabWidget中添加android:showDividers="none"消除三个tab之间的竖线
做出左右滑动三个fragment的效果:
注意:这个item有一个顺序排序,默认是看第一个灰色的状态,所以换个位置,把第一个item放到最后一行。
实现接口TabHost.TabContentFactory:
滑动的时候选个tab:
ViewPager和tab的互动:
千姿百态的ViewPager动画
1.用PageTransformer自定义动画 : setPage Transformer
2.Zoom-out Page Transformer
3.Depth Page Transformer
support包里的其它重要控件有:
ViewPager,Fragment,
3 LayoutInflater类
LayoutInflater是一个抽象类,继承自Object,位于android.view包下,作用类似于findViewById() ,不同的是LayoutInflater找的是xml布局文件并且实例化,而findViewById()找到具体widget控件。
LayoutInflater什么时候用?
有时我们需要动态的载入一个xml布局从而获取其中的控件,这时就需要使用LayoutInflater,作用是将xml布局文件实例化为它对应的View对象。这个类不能直接使用,也就是不能直接调用其中的成员。
如何使用:
1、获取LayoutInflater实例。
LayoutInflater这个类不能直接使用,也就是不能直接调用其中的成员, 需要先获取其实例再使用。获取实例的方式如下:
方式1:LayoutInflater inflater = getLayoutInflater(); //getLayoutInflater()是Activity类中的方法,直接在Activity类中调用
方式2:LayoutInflater inflater = (LayoutInflater)context.getSystemService( Context.LAYOUT JINFLATER _SERVICE);
方式3:LayoutInflater inflater = LayoutInflater.from(context); //context当前上下文
2、使用LayoutInflater的inflate() 方法加载布局文件,inflate()有如下几种重载方法:
方法1:public View inflate (XmlPullParser parser, ViewGroup root)
方法2:public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
上述方法1和方法2是通过XmlPullParser作为数据来源创建View对象;下面方法3和方法4是最常用的通过resource目录下的文件作为数据来源来创建View对象。
方法3:public View inflate (int resource, ViewGroup root)
参数1为要填充的xmI文件(只能使用res目录下的布局文件,不能使用其他xml文件)。参数2为生成的view对象的父控件。如果设置null 并且提供了root则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。
方法4:public View inflate (int resource, ViewGroup root, boolean attachToRoot)
参数1同方法3,参数2和参数3需要联合设置,若是第三个参数为true,那么第二个参数代表从第一个参数填充成的view对象的父控件;参数三是个boolean ,表示是否需要从第一个参数填充成的 view对象附着到第二个参数指定的控件上。如果第二个参数为null,也就是我们不指定父控件,那么新生产的view对象的根布局的某些参数会失效。返回:如果提供了root,且第三个参数为true,则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。
3、获取加载的布局文件中的某一个控件实例
例如,如下代码从layout main.xml中动态获取id为edText的EditText控件实例。LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_ INFLATER SERVICE);
View view = inflater.inflate(R.layout.layout main, null);
EditText editText = (EditText)view.findViewById(R.id.edText);