Android добавить изображение к кнопке

Я хочу добавить изображение к Button (без imagebutton , так как конкретная кнопка может содержать текст или изображение, плюс кнопка с изображением имеет ту же проблему), сохраняя при этом первоначальную кнопку в стиле андроида. Поэтому добавление android:background в XML не режет его, так как это приведет к удалению андроидной кнопки по умолчанию с закругленными углами и т. Д. (android.R.drawable.btn_default)

Это возможно?

Я думаю, что один из способов – сделать 9- 9patch образ для нажатой кнопки (один для вверх и один для вниз) и onTouch Action_DOWN сделать многоуровневый фон для рисования и поместить его на кнопку и сделать то же самое, но с другим 9patch для onTouch Action_UP , Но я думаю, что это существенно снизит производительность приложения, так как для этого потребуется довольно много чтения ресурсов и слияния слоев для всех нажатий на кнопки (и для моего приложения это будет довольно много). Правильно ли это указано выше?

EDIT: я не могу объявить источник изображения в XML, потому что получаю изображения из веб-службы, поэтому все можно надеть на кнопки, но это должно произойти программно.

Это можно сделать, используя атрибуты android:drawableTop , android:drawableBottom , android:drawableLeft , android:drawableRight в вашем layout.xml.

Установите ниже свойство кнопки для отображения изображения с текстом, используя это изображение свойства отображается над текстом.

 <Button android:drawableTop="@drawable/ic_launcher"/> 

Введите описание изображения здесь

  <Button android:layout_width="0dp" android:layout_weight="1" android:background="@drawable/home_button" android:drawableLeft="@android:drawable/ic_menu_edit" android:drawablePadding="6dp" android:gravity="left|center" android:height="60dp" android:padding="6dp" android:text="AndroidDhina" android:textColor="#000" android:textStyle="bold" /> 

Для получения дополнительной информации http://androiddhina.blogspot.in/2015/09/how-to-add-image-inside-button.html

Для настройки изображения:

 btn.setBackgroundResource(R.drawable.ic_launcher); 

Для установки текста:

 btn.setText("My Button"); 

Код:

 private Drawable buttonDrawable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button btn=(Button) findViewById(R.id.button1); buttonDrawable=btn.getBackground(); //Setting the image. btn.setBackgroundResource(R.drawable.ic_launcher); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { /*Removing image and setting text*/ btn.setBackgroundDrawable(buttonDrawable); btn.setText("My Button"); } }); } 

Вы можете создать свой собственный вариант с несколькими состояниями и установить его на задний план

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/selected" /> <item android:drawable="@drawable/normal" /> </selector> 

Сноски могут иметь закругленные углы.

 <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" android:bottomLeftRadius="0.2dp" android:bottomRightRadius="0.2dp"/>