После вызова setCompoundDrawablesметода составной Drawable не отображается ..
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);
Есть предположения?
setBounds(Rect)вызван.
После вызова setCompoundDrawablesметода составной Drawable не отображается ..
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);
Есть предположения?
setBounds(Rect)вызван.
Ответы:
Мне нужно было использовать 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 );
EditText#setCompoundDrawablesWithIntrinsicBoundsтребует как минимум API 17.
Изображение пустое, потому что оно не имеет указанных границ. Вы можете использовать, setCompoundDrawables()но прежде чем вы должны указать границы изображения, используя Drawable.setBounds()метод
Пример установлен наверху:
view.setCompoundDrawablesWithIntrinsicBounds(
null,
getResources().getDrawable(R.drawable.some_img),
null,
null
);
порядок аргументов: (слева, сверху, справа, снизу)
В Котлине:
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)
setCompoundDrawablesWithIntrinsicBoundsбудет работать ..
Для меня setCompoundDrawablesWithIntrinsicBounds (Drawable, Drawable, Drawable, Drawable) не работает.
Мне пришлось использовать setCompoundDrawablesWithIntrinsicBounds (0, 0, 0, 0) .
Пример с Kotlin:
val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)
Изображение не отображается, так как вы не указали границы, поэтому у вас есть 2 варианта здесь.
1-й метод
Используйте setCompoundDrawablesWithIntrinsicBoundsметод, как показано ниже
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);
Вот и все.
(..)WithIntrinsicBoundsнеобходимо вызвать вариант названного метода . Кроме того, после этого вызоваpaddingсоставной Drawable должен быть установлен, чтобы вызвать эффект