您的位置:首页 > 移动开发 > Android开发

Android官方文档学习01多屏幕适配&Fragment间通信&Intent分享

2017-01-07 19:47 295 查看
记得2014年刚开始学习安卓时,安卓的资源相对现在还不够丰富,常看到安卓前辈们推荐初学者看权威的官方安卓文档的话,奈何英语能力一般,阅读这些英文文档心有余力不足,陆陆续续看了一些就停下来了。现在安卓官方有了中文文档了,因此想从头过一遍。

在这个过程中,我希望:

巩固和扩宽安卓基础知识和能力

结合自己这些年的安卓开发经验,尝试做一个系统的总结,形成一个安卓知识的思维体系

这个系列更像是读书笔记

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 文档