调用setCompoundDrawables()不会显示Compound Drawable

时间:2011-07-06 02:08:02

标签: android android-layout android-drawable

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

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

有什么想法吗?

10 个答案:

答案 0 :(得分:578)

答案 1 :(得分:62)

使用此(我测试过)。它运作良好

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

答案 2 :(得分:45)

图片为空,因为它没有指定的边界。您可以使用setCompoundDrawables()但在使用Drawable.setBounds()方法指定图像边界之前

答案 3 :(得分:29)

示例设置到顶部:

view.setCompoundDrawablesWithIntrinsicBounds(
    null,
    getResources().getDrawable(R.drawable.some_img),
    null,
    null
);

参数顺序:(左,上,右,下)

答案 4 :(得分:21)

再简单一点:

Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );

答案 5 :(得分:9)

在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);

答案 6 :(得分:4)

由于未指定边界,因此未显示图像,因此此处有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);

就是这样。

答案 7 :(得分:2)

答案 8 :(得分:2)

在科特林:

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)

答案 9 :(得分:1)

Kotlin的例子:

<item name="coordinatorLayoutStyle">@style/Widget.Design.CoordinatorLayout</item>