获取自定义主题(attr.xml)中的定义的图片(Drawable)

原创 2015年11月20日 09:55:53

  获取自定义主题(attr.xml)中的定义的图片(Drawable)

从事安卓开发一周学到了很多东西。一个刚刚从学校毕业的菜鸟想要变成编程达人注定不是一条容易的路。争取每天写下一点工作心得或者收获。


正文:

今天在开发中需要解决一个根据当前主题Theme而变换图片的需求。 想必大家都会如何从layout设置。如下

attrs.xml

<resources>
    <declare-styleable name="MyTheme">
        <attr name="homeyjzc" format="reference" />  //index=1
        <attr name="homessgj" format="reference" />  //index=1
    </declare-styleable>
</resources>


attrs.xml中定义了两个引用类型,其指向了Styles.xml定义的Theme。


Styles.xml

    <style name="Theme3" parent="AppTheme.NoActionBar">
        <item name="homessgj">@drawable/home_ssgj1</item>
        <item name="homeyjzc">@drawable/home_spjd1</item>
    </style>


重点来了:如何使用相应的图片呢?

分为两种情况:

1. layout中使用,这种情况相对简单。

android:background="?titlebg"
加上一个"?" 即可指向当前Theme中的图片


2. .java文件中使用则相对麻烦一点

TypedArray a = context.obtainStyledAttributes(R.styleable.MyTheme);
Drawable d = a.getDrawable(iconId); //icoid 指的是所需要的drwable在Mytheme的实际index
        // 回收
a.recycle();


错误方法:

Drawable d = a.getDrawable(R.attr.homeyjzc); //此处并不能指向homeyjzc代表的Drawable


完成

总结:期初作者没有使用styleable,而是将"reference"直接放入attr.xml文件中,在layout中使用完全没有问题,直接调用。但是java文件中总是报错,obtainStyledAttributes()方法只适用于读取styleable中定义的attribute。
不知道各位大神有没有其他能够获取自定义style中所指向的drawable?
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android中自定义属性attr.xml的格式详解

1. reference:参考某一资源ID。     (1)属性定义:                                                (2)属性使用: ...

Android 多主题切换 (theme + style) 及 selector/drawable 无法引用 ?attr 属性的问题

需求:最近需要实现应用内多主题的需求: 要求应用内预置 10 个左右的主题配色方案, 用户可按需切换. 刚一拿到需求, 觉得这简单, theme + style 就可以搞定了. 没过多久就遇到了 a...

Android 5.0以下XML定义的drawable不识别?attr/属性的解决思路

Android Android 5.0以下XML定义的drawable不识别?attr/属性的解决思路 (Resources$NotFoundException 错误)...
  • ifadai
  • ifadai
  • 2017年02月23日 22:18
  • 273

android中?attr/**与@drawable/**或@color/**等的区别

今天在写一个Demo的时候,突然遇到?attr/colorPrimary这个用法,一百度,竟然全网都是同一篇文章, 我苦思冥想,最终还搬出了Android源码,终于知道了意思,暂且记下来,作为备...

Android自定义属性时format选项( <attr format="reference" name="background" /> )

Android自定义属性时format选项可以取用的值 1. reference:参考某一资源ID。 (1)属性定义:[html] view plaincopyprint? ...

Android 开发 Tip 2 -- 多主题下drawable.xml使用?attr的问题

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51820937多主题下引用attr的问题。 在5.0以下手机,如果drawable xm...

android中?attr/**与@drawable/**或@color/**等的区别

今天在写一个Demo的时候,突然遇到?attr/colorPrimary这个用法,一百度,竟然全网都是同一篇文章, 我苦思冥想,最终还搬出了android源码,终于知道了意思,暂且记下来,作为备忘录吧...

Android开发系列(十八):自定义控件样式在drawable文件夹下的XML实现

使用XML控制控件的样式

Android中attr自定义标签详解

xmlns:wen=http://schemas.android.com/apk/res/com.iteye.googlers     android:orientation="vertical...

android attr 属性自定义 应用皮肤样式

在android中我们习惯了在XML布局文件中,进行控件属性的设置,由于控件默认提供的属性数量有限,为了增加属性我们可以给控件添加一些自定义的属性,下面来讲一下为控件添加自定义属性的几个步骤。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取自定义主题(attr.xml)中的定义的图片(Drawable)
举报原因:
原因补充:

(最多只允许输入30个字)