@和?的区别

style="android:attr/progressBarStyleHorizontal"

style="@android:style/Widget.ProgressBar.Horizontal"

在设置style的时候既可以使用@也可以使用?,他们有什么区别呢??

使用@表示使用固定的style,而不会跟随Theme改变,这style可以在对应的style.xml中找到。

使用?表示从Theme中查找引用的资源名,这个google叫预定义样式,用在多主题时的场景,属性值会随着主题而改变。(?需要和attr配合使用)

例如上面的progressBarStyleHorizontal,查看\platforms\android-23\data\res\values\themes.xml文件,可以看到在不同的theme中,progressBarStyleHorizontal引用的style是不同的。看下面的示例:

1.在Theme中

@style/Widget.ProgressBar.Horizontal

2.Theme.Holo中为

@style/Widget.Holo.ProgressBar.Horizontal

@style/Widget.AppCompat.ProgressBar.Horizontal

@android:style/Widget.ProgressBar.Horizontal

"?attr/属性""?属性""?android:属性""?android:attr/属性"

另外:

当引用系统自带的style和attr时

"@android:style/主题"和"@style/android:主题"等同"?android:attr/属性"和"?attr/android:属性"等同

自定义随主题改变的属性

1、 如果是自定义控件,请在style.xml中或attrs.xml中声明属性:


如代码第五行所示,必须指明format为reference。这样自定义控件的属性就可以在xml使用,如果不明白,查看这里

2、 在Theme中使用自定义的属性,可以再多个主题中定义不同的属性值



3、 在对应的属性color,drawable等里面加入相应的资源

#FFFF0000

1

4、这样就可以在xml中使用自定义控件的自定义属性,这个属性会随着主题而改变:

见下面第五行代码

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android媒体库使用分组查询
  6. EditText的常用属性
  7. android service 相关问题汇总
  8. Android(安卓)使用shape来优化界面效果
  9. Android中使用jiecaovideoplayer播放视频

随机推荐

  1. android htttp网络通信
  2. Android学习之路六:ProgressBar
  3. Android在开机时自动启动一个应用程序
  4. android中加载assets中的资源文件
  5. android3.1开发环境配置
  6. Android中声音的管理类AudioManager
  7. 转载:Android开源项目分享
  8. Android下自定义IP控件
  9. 使用Android平板编程,执行linux命令
  10. Android(安卓)读取doc文件