Android官方文档阅读01-多屏幕适配&Fragment间通信&Intent分享

Supporting Different Screen

安卓多屏幕适配 传送门

安卓的屏幕适配以前一直是个重要的话题。这些适配技巧固定,渐渐的不再成为大家讨论的焦点了

通过安卓项目提供的特性适配多屏幕.分类处理,针对不同的手机屏幕情况,给出不同的参数设置文件
引入dip(dp)距离单位,该单位与像素密度相关,而与屏幕像素没有直接关联。像素密度和分辨率决定了一个屏幕的尺寸大小

Fragment实现DynamicUI

传统官方的Fragment和Activity之间的通信方式

通信:Framgnet出一部门内容,Activity出一部门内容,把这两部门内容合在一起处理

通信一:如何实现Activity对Fragment的通信
  1. setArgument()把数据传入fragment
  2. 在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"));
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容