2015-10-01 4 views
2

У меня есть ряд иллюстраций фона, которые отличаются друг от друга только цветом границы или цветом фона.Как повторно использовать drawable

Есть ли способ определить общий чертеж, а затем добавить (или изменить) атрибут, который мне нужен.

Например вот прямоугольная вытяжке

XML файл

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 

    android:shape="rectangle" > 
    <corners android:radius="@dimen/radius_small"/> 
    <solid android:color="@color/simple_black" /> 
    <stroke android:width="2dip" android:color="@color/simple_white" /> 
    <padding 
     android:left="@dimen/two_dp" 
     android:right="@dimen/two_dp"/> 
</shape> 

, и я хотел бы изменить цвет или цвет обводки, а не создавать отдельную вытяжку для каждого из них ,

+1

Что минимальная целевая версия SDK для вашего приложения? – alanv

+0

Минимальный API: 9 – Zvi

ответ

2

Предполагается, что вы хотите сделать это программно. Если все, что вам нужно, чтобы изменить цвет фона и/или цвет обводки, вот как вы можете это сделать:

  1. Получить ссылку на форму

    GradientDrawable drawable = (GradientDrawable)context.getResources().getDrawable(R.drawable.shape_id) 
    
  2. изменить цвет

    drawable.setColor(Color.RED) 
    
  3. Чтобы изменить цвет и ширину обводки (обратите внимание, что вы можете изменить их только вместе, поэтому я рекомендую хранить переменную с шириной хода в px)

    drawable.setStroke(Util.dpToPx(context, 2), Color.YELLOW)

+0

Спасибо @Ari, но я хочу сделать это в XML. Однако, если я не найду удовлетворительное решение в XML, я могу использовать ваше решение. – Zvi

+0

Добро пожаловать. Если вы решите использовать мой ответ, отметьте его. – Ari

+0

В любом случае мне непонятно, как мне получить ссылку на фигуру, когда я использую drawable в качестве фона LinearLayout. Я попробовал ваш код, заменив shape_id на имя mydrawable, и я изменил цвет и ход, но никаких изменений не произошло. – Zvi

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