@和?的区别

 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是不同的。看下面的示例:

在Theme中

<item name="progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontalitem>

Theme.Holo中为

 "progressBarStyleHorizontal">@style/Widget.Holo.ProgressBar.Horizontal

style和attr使用区别

style

@style/Widget.AppCompat.ProgressBar.Horizontal@android:style/Widget.ProgressBar.Horizontal

attr

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

另外:

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

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

自定义随主题改变的属性

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

<declare-styleable name="SunnyAttr">    <attr name="sunnyTextColor" format="reference"/>    <attr name="sunnyBgColor" format="reference"/>    <attr name="sunnyTextColorWhite" format="color"/>    <attr name="sunnyTextColorRed" format="reference"/>    <attr name="textColor" format="reference">attr>declare-styleable>

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

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

-- Base application theme. -->

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

<color name="sunnyTextColorRed">#FFFF0000

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

见下面第五行代码

<com.smartbracelet.sunny.sunnydemo3.SunnyTextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_centerInParent="true"    android:text="设置界面"    app:sunnyTextColor="?attr/sunnyTextColorRed"    />

Android xml中 @和?区别,style和attr小结
android中?attr/** 与@drawable/ ** 或@color/**等的区别

关注我的公众号,轻松了解和学习更多技术

更多相关文章

  1. Android中RelativeLayout各个属性的含义
  2. Android(安卓)Studio 之 AndroidManifest.xml文件中的android:la
  3. Androidの自定义对话框AlertDialog(一)
  4. Android(安卓): android 9.0 audio 接口分析
  5. 【ImageView】图片自适应及android:scaleType属性
  6. Android(安卓)属性总结
  7. Android三种常用动画分享
  8. Android三种动画详解
  9. Android中字体的处理

随机推荐

  1. android中的常见类(2)
  2. 【转】Android(安卓)9 Pie 兼容性常见问
  3. Android使用FtpServer开启FTP服务端
  4. Android中传递对象的三种方法的实现
  5. 分析Activity的View绑定过程
  6. Android中优雅的退出程序
  7. 【Android】获得系统语言和地区
  8. Android轻松实现多语言的方法示例
  9. Android(安卓)1.5 在eclipse中出现 Inter
  10. Android(安卓)— 使用 SharedPreferences