Часто разработчики сталкиваются с задачей динамического создания и стилизации элементов интерфейса в Android. Пример такой задачи — установка изображения слева от текста на кнопке (так называемого drawableLeft) во время выполнения программы, а не в момент ее компиляции.
Примером кода, который создает кнопку и задает ей некоторые атрибуты в момент выполнения программы, может служить следующий код:
1 2 3 4 5 6 7 8 9 10 11 | LinearLayout linear = (LinearLayout) findViewById(R.id.LinearView); Button button = new Button( this ); button.setText( "Button" ); button.setOnClickListener(listener); button.setLayoutParams( new LayoutParams( android.view.ViewGroup.LayoutParams.FILL_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT ) ); linear.addView(button); |
Однако, этот код не задает изображение слева от текста на кнопке. Для этого нужно использовать метод setCompoundDrawablesWithIntrinsicBounds()
.
Вот как выглядит пример кода, который устанавливает изображение слева от текста на кнопке:
1 2 | Drawable img = ContextCompat.getDrawable(context, R.drawable.your_image); button.setCompoundDrawablesWithIntrinsicBounds(img, null , null , null ); |
В этом коде сначала получается ссылка на ресурс изображения с помощью метода getDrawable()
класса ContextCompat
, а затем изображение устанавливается слева от текста на кнопке с помощью метода setCompoundDrawablesWithIntrinsicBounds()
.
Важно помнить, что метод setCompoundDrawablesWithIntrinsicBounds()
принимает 4 аргумента: изображения для левой, верхней, правой и нижней сторон текста соответственно. В данном случае изображение устанавливается только слева от текста, поэтому для остальных сторон передается null
.
Добавить комментарий