我调用setCompoundDrawables方法后,未显示复合Drawable。.

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);


有什么想法吗?

评论

如以下答案中所述,需要调用名为(..)WithIntrinsicBounds的方法的变体。附带说明,必须在此调用之后设置“复合可绘制”的填充以产生效果

该文档说:Drawables必须已经调用了setBounds(Rect)。

hunterp,您好,刚在咖啡厅(Angel)遇到了您,现在我知道您知道什么是Android Drawables(也许您在处理其中许多错误时会遇到错误),所以我可以告诉您一些我合作的项目必须解决此问题,请查看Pic。(github.com/square/picasso)使用的github.com/JakeWharton/DiskLruCache(我与之合作使Android更加友好)

@ Dr1Ku实际上我以前有它,反正可以工作。

#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)