2015-08-16 3 views
5

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

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

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

enter image description here

И я использую этот 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-файле моей активности, чтобы я мог использовать его для отображения другого изображения для каждой кнопки?

ответ

2

Если вы используете 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); 
} 
+0

Спасибо :) Я использовал ImageView вместо Button, как вы предложили – Bogdan

-1

Я нашел этот инструмент очень полезный: 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); 
0

Я хотел бы добавить подробнее на вопрос 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" 

до нужного Drawable изображения.

Смежные вопросы