web-dev-qa-db-ja.com

setCompoundDrawables()を呼び出すと、Compound Drawableが表示されない

setCompoundDrawables メソッドを呼び出した後、複合Drawableは表示されません。

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

何かご意見は?

292
hunterp

setCompoundDrawablesWithIntrinsicBounds を使用する必要がありました。

580
hunterp

これを使用します(テスト済み)。うまくいく

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 );
62
aryan bahmani

指定された境界がないため、画像は空白です。 setCompoundDrawables()を使用できますが、Drawable.setBounds()メソッドを使用して画像の境界を指定する前に

46
teoREtik

上に設定した例:

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

引数の順序:(左、上、右、下)

30
Andrey

少し簡単になりました:

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

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);
9
許維德

コトリンで:

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)
2
CoolMind

私にとっては setCompoundDrawablesWithIntrinsicBounds(Drawable、Drawable、Drawable、Drawable) は機能しませんでした。

setCompoundDrawablesWithIntrinsicBounds(0、0、0、0) を使用する必要がありました。

2
Bharat Dodeja

Kotlinの例:

    val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
    myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)
1
mike.tihonchik