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

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

возможно ли это каким-либо образом?

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

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

5 ответов


Это можно сделать с помощью android:drawableTop, android:drawableBottom, android:drawableLeft, android:drawableRight атрибуты в вашем макете.XML.


enter image description here

     <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


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

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

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

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");   
        }
    });
}

Вы можете создать свой собственный drawable с несколькими состояниями и установить, что в фоновом режиме

<?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"/>