Android官方文档学习01多屏幕适配&Fragment间通信&Intent分享
2017-01-07 19:47
295 查看
记得2014年刚开始学习安卓时,安卓的资源相对现在还不够丰富,常看到安卓前辈们推荐初学者看权威的官方安卓文档的话,奈何英语能力一般,阅读这些英文文档心有余力不足,陆陆续续看了一些就停下来了。现在安卓官方有了中文文档了,因此想从头过一遍。
在这个过程中,我希望:
巩固和扩宽安卓基础知识和能力
结合自己这些年的安卓开发经验,尝试做一个系统的总结,形成一个安卓知识的思维体系
这个系列更像是读书笔记
安卓的屏幕适配以前一直是个重要的话题。这些适配技巧固定,渐渐的不再成为大家讨论的焦点了
通过安卓项目提供的特性适配多屏幕.分类处理,针对不同的手机屏幕情况,给出不同的参数设置文件
引入dip(dp)距离单位,该单位与像素密度相关,而与屏幕像素没有直接关联。像素密度和分辨率决定了一个屏幕的尺寸大小
通信一:如何实现Activity对Fragment的通信
setArgument()把数据传入fragment
在Activity里,持有Fragment对象,调用Fragment的方法
通信二:如何实现Fragment对Activity的通信
通过接口回调,Activity实现接口,实现赋值到fragment里
如何实现在同一个Activity里,Fragment与Fragment之间的通信
Fragment先和Activity通信(使用通信二);然后Activity再与另一个Fragment通信(使用通信一)。这样就实现了Fragment之间的通信
为此,目前安卓项目中广泛使用的EventBus/RxBus有效解决了这个问题,其中RxBus得到了EventBus作者的推荐和肯定,Rx响应理念也越来越盛行,推荐使用RxBus
比如,我把在新闻看到的App内容通过邮件App发送给我的好朋友,怎么实现?
首先要对Intent页面跳转有了解,可以阅读这篇官方文档 Intent和Intent过滤器。Intent分显示和隐式,显式用在App内启动Activity和Server,隐式用在启动其他应用的组件。
该文阅读后,注意事项:
方法 startActivity() 和 startActivityForResult() 将按照已申明 CATEGORY_DEFAULT 类别的方式处理所有 Intent。 如果未在 Intent 过滤器中声明此类别,则隐式 Intent 不会解析为您的 Activity。
Android 会自动将 CATEGORY_DEFAULT 类别应用于传递给 startActivity() 和 startActivityForResult() 的所有隐式 Intent,因此如需 Activity 接收隐式 Intent,则必须将”android.intent.category.DEFAULT” 的类别包括在其 Intent 过滤器中
如果过滤器只是列出 MIME 类型,则假定组件支持 content: 和 file: 数据
startActivity不仅可以启动当前App里的Activity,还可以启动其他App的Activity,只要这个Activity允许接受其他App的请求
这个标志位在Manifest.xml的Activity标签里配置,如下(其他配置信息省略)
发送方通过Intent的键值存储数据,接收方从Intent根据之前存入的键取出数据,因此需要统一键的内容。发送方和接受方在我举的例子里,新闻类App是发送方,邮件是接收方,相互之间不知道对方,这个键的内容一致怎么约定呢?这个约定Android系统做了。
Intent类下有很多静态常量,其中Intent.EXTRA_xxx系列就是各种约定的键内容。关于Intent跳转的组成数据和用法,详细看这篇
代码实现如下:
在这个过程中,我希望:
巩固和扩宽安卓基础知识和能力
结合自己这些年的安卓开发经验,尝试做一个系统的总结,形成一个安卓知识的思维体系
这个系列更像是读书笔记
Supporting Different Screen
安卓多屏幕适配 传送门安卓的屏幕适配以前一直是个重要的话题。这些适配技巧固定,渐渐的不再成为大家讨论的焦点了
通过安卓项目提供的特性适配多屏幕.分类处理,针对不同的手机屏幕情况,给出不同的参数设置文件
引入dip(dp)距离单位,该单位与像素密度相关,而与屏幕像素没有直接关联。像素密度和分辨率决定了一个屏幕的尺寸大小
Fragment实现DynamicUI
传统官方的Fragment和Activity之间的通信方式
通信: Framgnet出一部门内容,Activity出一部门内容,把这两部门内容合在一起处理通信一:如何实现Activity对Fragment的通信
setArgument()把数据传入fragment
在Activity里,持有Fragment对象,调用Fragment的方法
通信二:如何实现Fragment对Activity的通信
通过接口回调,Activity实现接口,实现赋值到fragment里
如何实现在同一个Activity里,Fragment与Fragment之间的通信
Fragment先和Activity通信(使用通信二);然后Activity再与另一个Fragment通信(使用通信一)。这样就实现了Fragment之间的通信
RxBus/EventBus实现组件间解耦
使用上述传统Fragment和Activity通信方式的书写繁琐,耦合程度较高,尤其Framgent里还有列表控件(RecyclerView,ListView等)的Adapter类里的点击响应和Fragment、Activity之间的交互,就更现繁琐,逻辑跳转多,维护性降低。为此,目前安卓项目中广泛使用的EventBus/RxBus有效解决了这个问题,其中RxBus得到了EventBus作者的推荐和肯定,Rx响应理念也越来越盛行,推荐使用RxBus
Share Simple Data
通过Intent,实现了单个App内四大组件的通信以及App间的通信。某个App内容分享到另一个App,也正是利用Intent把数据传过去。比如,我把在新闻看到的App内容通过邮件App发送给我的好朋友,怎么实现?
首先要对Intent页面跳转有了解,可以阅读这篇官方文档 Intent和Intent过滤器。Intent分显示和隐式,显式用在App内启动Activity和Server,隐式用在启动其他应用的组件。
该文阅读后,注意事项:
方法 startActivity() 和 startActivityForResult() 将按照已申明 CATEGORY_DEFAULT 类别的方式处理所有 Intent。 如果未在 Intent 过滤器中声明此类别,则隐式 Intent 不会解析为您的 Activity。
Android 会自动将 CATEGORY_DEFAULT 类别应用于传递给 startActivity() 和 startActivityForResult() 的所有隐式 Intent,因此如需 Activity 接收隐式 Intent,则必须将”android.intent.category.DEFAULT” 的类别包括在其 Intent 过滤器中
如果过滤器只是列出 MIME 类型,则假定组件支持 content: 和 file: 数据
startActivity不仅可以启动当前App里的Activity,还可以启动其他App的Activity,只要这个Activity允许接受其他App的请求
这个标志位在Manifest.xml的Activity标签里配置,如下(其他配置信息省略)
<Activity android:exported="false/true"> <intent-filter></intetn-filter> </Activity>
发送方通过Intent的键值存储数据,接收方从Intent根据之前存入的键取出数据,因此需要统一键的内容。发送方和接受方在我举的例子里,新闻类App是发送方,邮件是接收方,相互之间不知道对方,这个键的内容一致怎么约定呢?这个约定Android系统做了。
Intent类下有很多静态常量,其中Intent.EXTRA_xxx系列就是各种约定的键内容。关于Intent跳转的组成数据和用法,详细看这篇
代码实现如下:
Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_EMAIL,new String[]{"sugaryaruan@gmail.com","sugarya@foxmail.com"}); intent.putExtra(Intent.EXTRA_SUBJECT,"我是分享标题"); intent.putExtra(Intent.EXTRA_TEXT,"我是分享内容...."); if(intent.resolveActivity(getPackageManager()) != null){ startActivity(Intent.createChooser(intent,"Share via")); }
相关文章推荐
- Android Web App官方文档翻译第二章:屏幕适配
- Android Web App官方文档翻译第二章:屏幕适配
- Android屏幕适配-官方文档
- Android Web App官方文档翻译第二章:屏幕适配
- Android Web App官方文档翻译第二章:屏幕适配
- Android Web App官方文档翻译第二章:屏幕适配
- android多屏幕适配相关知识和官方翻译文档
- Android Web App官方文档翻译第二章:屏幕适配
- android 官方文档阅读记录-多屏幕适配
- 【android官方文档】android 屏幕适配 支持不同的屏幕
- Android屏幕适配全攻略(最权威的官方适配指导)Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配。 由于Android系统
- Android学习13--使用Intent和IntentFilter进行通信
- Android Geofence的学习(二)继续翻译官方文档
- android Fragment(Android官方文档中文版)
- 【译】Google官方教程:Android平板界面适配之屏幕尺寸限定符
- Android文档学习07_多屏幕支持
- 【官方】Android多屏幕的设计与适配(Designing for Multiple Screens)
- Android基础之使用Fragment适应不同屏幕和分辨率(分享)
- Android文档学习03_Intent
- 【Android UI】:Fragment官方文档