Android 特殊场景下获取Drawable的资源id(ResourceId)

这两天在自定义指针View时,选中和未选中时文字背景要不一样。一开始采用

TextBg=array.getDrawable(R.styleable.ViewPagerTitle_textViewBg)
+
textView.setBackground(TextBg)

此处TextBg是个Drawable

这个方案,但发现有问题,是Drawable复用的问题。

后来想到,

用textView.setBackgroundResource(TextBgResId);这个是没问题的。

但这个TextBgResId怎么拿到呢?

答案是:TextBgResId=array.getResourceId(R.styleable.ViewPagerTitle_textViewBg,0);

这是一种需要动态获取自定义属性中Drawable的资源id的案例。

其实,由于属性方法这块自己掌握的不全面,array.getResourceId()这个方法是搜了一圈才找到的。而搜的过程中,发现了另一个实现需求而产生的知识点。就是:

有一组相似的图片,名称也很相似。
比如电量图标,ic_battery_0,ic_battery_1,ic_battery_2,…,ic_battery_100。
那么如果要根据电量值显示对应的图标的话,动态获取ResourceId才是一个优雅的方案,而不是多个if else嵌套的那种方案。

直接上结论,代码示例:

String resName = "ic_battery_" + batteryValue;
int resID = getResources().getIdentifier(resName, "drawable",   getContext().getPackageName());

好了。这就是特殊场景下获取资源id即ResourceId的两个典型案例。
 

猜你喜欢

转载自blog.csdn.net/yeziyfx/article/details/126261727
今日推荐