setCompoundDrawables
方法后,未显示复合Drawable。.Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);
有什么想法吗?
#1 楼
我需要使用setCompoundDrawablesWithIntrinsicBounds
。评论
需要api 17,所以Drawable.setBounds()可能更好
–user1324936
2014年1月1日15:25
非常感谢你..这对我有用..我能知道这两者之间有什么区别吗?
–AndEngine
2014年6月6日下午7:13
@ user1324936“相对”版本需要API 17,其他版本可以与以前的版本一起使用
–弥撒
2015年3月26日14:47
在API级别3中添加了@ user1324936 setCompoundDrawablesWithIntrinsicBounds
–格雷格·恩尼斯(Greg Ennis)
2015年4月1日在21:47
我正在使用setCompoundDrawableRelativeWithIntrinsicBounds <-,这是在API 17上添加的。请注意intellisense。
–霓虹灯Warge
16/12/21在14:42
#2 楼
使用这个(我测试过)。效果很好Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight();
int w = image.getIntrinsicWidth();
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );
评论
当定位低于17的API时,这很有用,因为EditText#setCompoundDrawablesWithIntrinsicBounds至少需要API 17。
–Krøllebølle
16-2-21在12:49
您可以为此提供资源吗?我看过的所有文档都表明自API 1起就可以使用。
– kurifu
16-10-18在22:58
#3 楼
图片为空,因为它没有指定的范围。您可以使用setCompoundDrawables()
,但在使用Drawable.setBounds()
方法指定图像的边界之前,请评论
最佳答案,因为您实际上提供了setBounds为什么重要的推理。
–安迪
17年10月10日在16:05
@Andy确实,最讨厌这些具有800票的答案,他们只是复制粘贴的代码行而没有任何单词
–Big_Chair
19年4月14日在8:53
#4 楼
设置为顶部的示例:view.setCompoundDrawablesWithIntrinsicBounds(
null,
getResources().getDrawable(R.drawable.some_img),
null,
null
);
参数顺序:(左,上,右,下)
评论
在我的情况下,使用按钮,这应该是可接受的答案。它按预期工作!!!它也向后兼容。
– mochadwi
19 Mar 17 '19在6:57
#5 楼
再简单一点:Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );
#6 楼
API 22中已弃用该代码。此代码对我有用:
Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);
#7 楼
由于未指定边界,因此未显示图像,因此此处有2个选项。第一种方法
使用
setCompoundDrawablesWithIntrinsicBounds
方法,如下所示Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);
第二种方法
/>您可以在应用到TextView之前先将边界应用于可绘制对象,如下所示
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);
就是这样。
#8 楼
在Kotlin中:1)设置
drawable
:val drawable = ContextCompat.getDrawable(context!!,R.drawable.ic_image)?.apply {
setBounds(0, 0, intrinsicWidth, intrinsicHeight)
}
或
val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
setBounds(0, 0, minimumWidth, minimumHeight)
}
2)设置
TextView
:textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)
或
button.setCompoundDrawables(null, drawable, null, null)
评论
对于Textview,setCompoundDrawablesWithIntrinsicBounds将起作用。
– Akash Bisariya
20-2-10在13:53
#9 楼
对我来说,setCompoundDrawablesWithIntrinsicBounds(Drawable,Drawable,Drawable,Drawable)不起作用。我必须使用setCompoundDrawablesWithIntrinsicBounds(0,0,0,0)。
评论
做什么的?要删除可绘制对象吗?
– CoolMind
18/12/14在15:40
#10 楼
Kotlin的示例: val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)
评论
如以下答案中所述,需要调用名为(..)WithIntrinsicBounds的方法的变体。附带说明,必须在此调用之后设置“复合可绘制”的填充以产生效果该文档说:Drawables必须已经调用了setBounds(Rect)。
hunterp,您好,刚在咖啡厅(Angel)遇到了您,现在我知道您知道什么是Android Drawables(也许您在处理其中许多错误时会遇到错误),所以我可以告诉您一些我合作的项目必须解决此问题,请查看Pic。(github.com/square/picasso)使用的github.com/JakeWharton/DiskLruCache(我与之合作使Android更加友好)
@ Dr1Ku实际上我以前有它,反正可以工作。