博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android预定义样式?android:attr/attribute、?attr/attribute和?attribute
阅读量:6954 次
发布时间:2019-06-27

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

系统内建属性

比如系统有一个内建属性selectableItemBackground,可以为可点击控件设置点击时的水波纹效果,以下几种方法都可以成功引用

// 未设置前    // 设置水波纹点击效果    // 省略attr/      // 省略android:    // 省略android:attr/复制代码

自定义属性

我们先在attrs.xml文件中自定义一个属性

// 通过format可以设置各种不同的类型,包括style,这里不再赘述
复制代码

此时如果直接引用是没有效果的,而且会报错

 

我们还需要在styles.xml文件中为这个自定义属性设置一个默认值,然后再引用就可以成功了,这里我们把Button的文字设置成红色

复制代码

当然,和内建属性的引用一样,我们也可以省略掉attr/

// 省略掉attr/也是可以引用成功的

总结

  1. Android内建属性引用前面可以加android:,但也可以省略,自定义属性则不可以加
  2. 属性的引用最短可以简化成?attribute,建议该写法比较简短
  3. 属性引用引用的其实不是引用属性,而是引用该属性设置的默认值,所以自定义属性记得在主题中设置引用属性的默认值,当人也可以再主题中更改系统内建属性的默认值

更换主题

参考

有一个想法,可以通过在不同的主题中定义同一个自定义属性的不同默认值,然后通过setTheme();方法来切换主题,马上验证下

首先在attrs.xml文件中自定义一个属性

// 通过format可以设置各种不同的类型,包括style,这里不再赘述
复制代码

然后在styles.xml中定义两个不同的theme

复制代码

本来想通过Application.setTheme();方法来设置主题,但发现未生效,具体原因还未去深究,现在只能通过调用Activity.setTheme();方法来设置出题,且必须在setContentView();方法前调用,否则无法生效,可以将Activity.setTheme();调用写在基类BaseActivity的onCreate方法里。

public class MainActivity extends Activity {    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // setTheme(R.style.AppTheme);        // 可以有一个换肤的页面供选择,然后把选择的选择的theme保存到Sharepreference中        setTheme(R.style.AppThemeGreen);        setContentView(R.layout.activity_main);}复制代码

总结:

  1. Application.setTheme()设置主题无法生效
  2. Activity.setTheme()设置主题需在setContentView之前调用才能生效

缺点: 1.假设有个换肤选择的Activity页面,选择后无法实时生效,需重启Activity。就是说已打开的Activity是无法马上看到效果的,新打开的Activity才能够看到换肤效果。 2.该换肤实现方式的所有主题需写死在styles.xml文件内,无法实现后台下载新皮肤。至于下载新皮肤网上有通过apk文件的方式,以后可以深入研究下。

参考

如果喜欢我的文章,可以扫描以下二维码关注我的微信公众号,我会定期发布最新的文章。

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

你可能感兴趣的文章
学习方式
查看>>
常用DOS命令补充
查看>>
rsync与inotify
查看>>
linux用户配置文件passwd和密码配置文件shadow,用户管理,组管理
查看>>
SylixOS启动读取配置文件
查看>>
你为什么在Redis里读到了本应过期的数据
查看>>
Nginx1.14.0 编译安装
查看>>
关于eclipse控制台输入汉字获取打印出现乱码结局方案
查看>>
css3动画2D、3D转换
查看>>
我的友情链接
查看>>
Struts2 的学习笔记(五) action的优化配置
查看>>
【Spring Boot】5.web开发
查看>>
获取实体类的属性数量
查看>>
物理返回刷新页面
查看>>
yii2 scenarios()如何理解?? [ 2.0 版本 ]
查看>>
Android studio实用插件分享
查看>>
Hive和Spark版本匹配信息
查看>>
threejs求物体在目标坐标系下的包围盒
查看>>
git log统计代码量命令
查看>>
JDK 1.8 List多条件分组
查看>>