博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Context创建一个View需要注意的地方
阅读量:6510 次
发布时间:2019-06-24

本文共 1438 字,大约阅读时间需要 4 分钟。

如果我们在java代码中创建一个View,那么需要在View的构造方法中传一个Context,Application和Activity都是Context的子类,关于使用Application和Activity的创建一个View,google的引导教程是这样解释的:

It is possible to get the Context for the Application, but it is incorrect to use that context for creating UI, because it does not have the correct theme information. Instead, use the Context object for the Activity instead. For example, if you are retrieving resources for your activity, you should do so from the Activity context, not the Application context.

就是说Application 这个Context没有携带正确的主题信息。我们应该使用Activity的Context。比如想取得Activity的资源就应该通过Activity context,而不是Application Context。 这是我做的一个小测试

//通过activity创建一个ViewRadioButton button1 = new RadioButton(this);button1.setLayoutParams(params);button1.setText("RadioButton created by activity");//通过Application创建一个ViewRadioButton button2 = new RadioButton(getApplicationContext());button2.setLayoutParams(params);button2.setText("RadioButton created by Application");linerLayout.addView(button1);linerLayout.addView(button2);复制代码

这2个RadioButton分别通过Activity和Application创建。最后的看看结果:

可以发现两个button选中时的颜色不一样,这是因为Activity创建的RadioButton携带有AppTheme中的主题信息。

@color/colorPrimary@color/colorPrimaryDark@color/colorAccent复制代码

随便补上一张详细的Context使用场景

  1. 启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。
  2. 在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。
  3. 在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)

注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。

转载地址:http://mrbfo.baihongyu.com/

你可能感兴趣的文章
聊聊flink的TableFactory
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
查看>>
8年软件测试工程师感悟——写给还在迷茫中的朋友
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>
延迟脚本的方式
查看>>
vue中实现单选
查看>>
1.4linux单用户模式下修改root密码和救援模式修改root密码
查看>>
微服务架构优缺点
查看>>
解读userenv的日志
查看>>
跨进程通信之Messenger
查看>>
ext3与ext4区别
查看>>
DHCP Snooping + Dynamic ARP Inspection(DAI) 配置
查看>>
使用应答文件安装域控制器
查看>>
UNIX/Linux 系统管理技术手册阅读(三)
查看>>
btrfs的使用(案例讲解)
查看>>
rpm db 损坏
查看>>