在我调用setCompoundDrawables方法后,复合Drawable没有显示。

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

任何想法吗?


当前回答

图像没有显示,因为你没有指定边界,所以你有两个选项。

1号方法

使用setcompounddrawableswithintrinsic icbounds方法,如下所示

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

2方法

你可以在应用到TextView之前对可绘制对象应用边界,如下所示

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

就是这样。

其他回答

使用这个(我测试过)。效果很好

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

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

对我来说,setCompoundDrawablesWithIntrinsicBounds(Drawable, Drawable, Drawable, Drawable)不工作。

我必须使用setcompounddrawableswithintrinsic icbounds(0,0,0,0)。

图像没有显示,因为你没有指定边界,所以你有两个选项。

1号方法

使用setcompounddrawableswithintrinsic icbounds方法,如下所示

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

2方法

你可以在应用到TextView之前对可绘制对象应用边界,如下所示

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

就是这样。

示例设置在顶部:

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

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