The difference between '?attr' between '?android:attr'

The difference between '?attr' between '?android:attr'

核心内容

  • ?更像是一个文件指针,他不是死的固定的与@android的@不同,通过关联不同的文件(系统的、非系统的)它更容易重写已存在的属性
  • ?attr:是一个定义在本地的属性,一般存在于你当前的主题中,例如我么是appcomapt的colorPrimaryDark一样
  • ?android:attr:这个跟?attr类似,也是一种文件动态引用,但是他是当前系统编译版本决定的,如果当前编译版本中存在这个属性,并且当前最低支持的版本支持这个属性,那我们就可以直接使用这个属性,否则我们可以考虑将他本地化自己添加在?attr的主题中
  • @adnroid指的是本地化的values,支持所有的版本都可以使用,一般是整个android系统通用的

我的主题:

`<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">'

主题中包含下面的background属性所以可以直接使用我自定义的:

`  <android.support.v7.widget.Toolbar
        android:id="@+id/fragment_zoom_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">`

我最低支持的版本是api14,如果我为高版本的属性使用?android:attr:他会提示我版本太低至少要求xx版本,例如下面带*的属性,这种情况就自己在主题中添加item重写该属性,在布局中改成?attr使用即可:

`<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_margin="@dimen/float_action_button_margin"
    app:layout_scrollFlags="scroll|enterAlways"
    android:src="@mipmap/ico_test_d"
    app:elevation="@dimen/float_action_button_elevation"
*错误的用法*app:backgroundTint="?android:attr/colorPrimaryDark"
app:layout_behavior="com.study.moodline.as.behaviors.ScrollAwareFABBehavior"
    app:layout_anchorGravity="bottom|right|end" />`

另外一种情况是我的当前主题中没有的属性,只能用系统的属性的情况,即只能使用?anrdoid:attr如下的TextView的textColor: <android.support.v7.widget.AppCompatTextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:singleLine="true" android:text="@string/app_name" android:textColor="?android:attr/textColor" android:textSize="20sp" />

总结

  • 主题决定你能使用的属性,用当前主题存在的属性可以自己重写,而且兼容性会比用系统的好很多
  • 如果当前主题没有,那只能用系统地了,但是需要注意系统的兼容性问题
  • 带?的代表的是动态的引用对应未见的values值
  • 带@的代表当前app和系统早已经存在的values值
  • 参考文档:http://blog.http417.com/2014/06/answering-that-nagging-androidattr.html?q=?attr
  • 如有不正确的欢迎指正
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值