2016-02-11 7 views
0

У меня есть следующая вытяжка:Изменение цвета твердого тела в вытяжке селектора

<item android:state_pressed="true" android:text="texting ....."> 
    <shape 
     xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> 
     <stroke android:width="@dimen/circleStrokeThickness" android:color="@color/earlGreen" /> 
     <solid 
      android:color="@color/lightGrey"/> 

     <size 
      android:width="100dp" 
      android:height="100dp"/> 
    </shape> 
</item> 


<item android:state_pressed="false" android:text="texting ....."> 
    <shape 
     xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> 
     <stroke android:width="4dp" android:color="@color/earlGreen" /> 
     <solid 
      android:color="@android:color/white"/> 

     <size 
      android:width="100dp" 
      android:height="100dp"/> 
    </shape> 
</item> 

Однако мне нужен несколько аналогичной тот, где твердый цвет отличается, но все остальное тоже самое. Есть ли какой-либо простой способ сделать это, или я должен просто определить количество xml-файлов? Я знаю, что можно изменить цвет фона во время выполнения, но я не вижу, как добраться до цвета определенного состояния.

+0

вы можете создавать переменные внутри XML, я никогда не судимый (вот почему я хочу комментировать и не awnsering) http://developer.android.com/tools/data-binding/guide.html – xanexpt

ответ

0

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

ShapeDrawable sd1 = new ShapeDrawable(new RectShape()); 
          sd1.getPaint().setColor(CommonUtilities.color); 
          sd1.getPaint().setStyle(Style.STROKE); 
          sd1.getPaint().setStrokeWidth(CommonUtilities.stroke); 
          sd1.setPadding(15, 10, 15, 10); 

          sd1.getPaint().setPathEffect(
            new CornerPathEffect(CommonUtilities.corner)); 
          ln_back.setBackgroundDrawable(sd1); 

Надеется, что это поможет!

2

Вы можете определить идентификатор для элемента формы <item android:id="@+id/shape_bacground"../> затем во время выполнения вы должны получить фон вашего зрения и привести его к LayerDrawable и использовать findDrawableByLayerId() для найти свою форму и установить его цвет, используя setColor(). Вот пример код:

вытяжки XML

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:drawable="@drawable/float_button_shadow1"> 
    </item> 
    <item 
     android:id="@+id/shape_bacground" 
     android:bottom="2dp" 
     android:left="1dp" 
     android:top="1dp" 
     android:right="1dp"> 
     <shape android:shape="oval" > 
      <solid android:color="#1E88E5" /> 
     </shape> 
    </item> 

</layer-list> 

Изменения цветового

try { 
     LayerDrawable layer = (LayerDrawable) view.getBackground(); 

     GradientDrawable shape = (GradientDrawable) layer 
       .findDrawableByLayerId(R.id.shape_bacground); 
     shape.setColor(backgroundColor);// set new background color here 
     rippleColor = makePressColor(); 
    } catch (Exception ex) { 
     // Without bacground 
    }