Пользовательские кнопки Android

Я создаю пользовательские кнопки в android, но хочу избежать повторения.

Я пытаюсь создать 2 кнопки, которые имеют один и тот же дизайн, но другой значок изображения вместо текста.

В настоящее время у меня есть:

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

И я использую этот xml в качестве ресурса:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <item> <shape> <padding android:bottom="5dp" android:left="5dp" android:right="5dp" android:top="5dp" /> <corners android:radius="20dp"/> </shape> </item> <item> <shape> <padding android:bottom="5dp" android:left="-5dp" android:right="5dp" android:top="-5dp" /> <solid android:color="#edebeb"></solid> <corners android:radius="20dp"/> </shape> </item> <item> <shape> <size android:height="150dp" android:width="150dp"></size> <padding android:bottom="5dp" android:left="-5dp" android:right="5dp" android:top="-5dp" /> <solid android:color="#fff"></solid> <corners android:radius="20dp"/> </shape> </item> </layer-list> 

Как я могу отображать другое изображение в центре каждой кнопки без дублирования файла xml?

Есть ли способ передать значение каждой кнопке в файле .java моей активности, чтобы я мог использовать ее для отображения другого изображения для каждой кнопки?

Если вы используете ImageView вы можете установить значок как src и использовать его в качестве фона:

  <ImageView ... android:src="@drawable/ic_whatever" android:background="@drawable/background" /> 

Все представления поддерживают onClick, поэтому он все равно может действовать как кнопка. В качестве альтернативы вы можете вставлять ярлыки, чтобы вы могли иметь следующие для каждого стиля кнопки:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <item android:drawable="@drawable/ic_whatever" /> <item android:drawable="@drawable/background" /> </layer-list> 

Java-версия того, что я предложил выше (из Activity ):

 public void onCreate(...) { ... ((ImageView) findViewById(R.id.my_button)).setImageResource(R.drawable.ic_whatver); } 

Я хотел бы добавить еще больше thestalker .

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

пример

  <mehdi.sakout.fancybuttons.FancyButton android:id="@+id/btn_twitter" android:layout_width="50dp" android:layout_height="30dp" android:layout_below="@+id/imageView2" android:layout_centerHorizontal="true" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:padding="7sp" fancy:fb_borderColor="#55acee" fancy:fb_borderWidth="2dp" fancy:fb_defaultColor="#fff" fancy:fb_focusColor="#4d55acee" fancy:fb_iconResource="@drawable/twitter" fancy:fb_radius="200dp" /> 

Изменить строку

  fancy:fb_iconResource="@drawable/twitter" 

До желаемого изображения.

Я нашел этот инструмент очень полезным: http://angrytools.com/android/button/

Если вам нужна рамка вокруг фонового изображения, вы можете попробовать настроить ее с помощью этого стиля, особенно <stroke/> .

,

Вы можете показывать разные изображения, пока каждая кнопка имеет уникальный идентификатор. В вашем макете XML добавьте android:background="@drawable/img_file_name_without_xtension" для каждой кнопки.

Чтобы сделать это программно в Java:

 Button myButton = (Button) findViewById(R.id.buttonID); myButton.setBackgroundResource(R.drawable.img_file_name_without_xtension);