Вызов setCompoundDrawables() не отображает составное рисование


после того, как я называю setCompoundDrawables метод, соединение Drawable не показано..

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

какие мысли?

8 266

8 ответов:

Мне нужно использовать setCompoundDrawablesWithIntrinsicBounds.

используйте это (я тестировал). Он работает хорошо

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() метод

еще немного проще:

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

пример, установленный сверху:

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

порядок аргументов: (слева, сверху, справа, снизу)

он устарел в 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);

пример с Котлин:

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