Часто разработчики сталкиваются с задачей динамического создания и стилизации элементов интерфейса в Android. Пример такой задачи — установка изображения слева от текста на кнопке (так называемого drawableLeft) во время выполнения программы, а не в момент ее компиляции.
Примером кода, который создает кнопку и задает ей некоторые атрибуты в момент выполнения программы, может служить следующий код:
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()
.
Вот как выглядит пример кода, который устанавливает изображение слева от текста на кнопке:
Drawable img = ContextCompat.getDrawable(context, R.drawable.your_image); button.setCompoundDrawablesWithIntrinsicBounds(img, null, null, null);
В этом коде сначала получается ссылка на ресурс изображения с помощью метода getDrawable()
класса ContextCompat
, а затем изображение устанавливается слева от текста на кнопке с помощью метода setCompoundDrawablesWithIntrinsicBounds()
.
Важно помнить, что метод setCompoundDrawablesWithIntrinsicBounds()
принимает 4 аргумента: изображения для левой, верхней, правой и нижней сторон текста соответственно. В данном случае изображение устанавливается только слева от текста, поэтому для остальных сторон передается null
.
Добавить комментарий