2013-10-04 4 views
0

Мне нужно изменить цвета из селектора независимо от времени выполнения, и мне нужно применить его к 4 различным кнопкам.Change ImageButton указывает цвет фона во время выполнения

Вот код ImageButton:

<ImageButton 
    android:id="@+id/buttonAgenda" 
    android:layout_width="100dp" 
    android:layout_height="100dp"   
    android:background="@drawable/drawable_button_states_corners" 
    android:src="@drawable/boton_agenda_1"/> 

В drawable_button_states_corners:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true"> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <solid android:color="@color/galicia2"/>  
     <corners 
      android:bottomRightRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topLeftRadius="10dp" 
      android:topRightRadius="10dp"/> 
    </shape>   
</item> 
<item android:state_enabled="true"> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <solid android:color="@color/galicia"/>  
     <corners android:bottomRightRadius="10dp" 
      android:bottomLeftRadius="10dp" 
      android:topLeftRadius="10dp" 
      android:topRightRadius="10dp"/> 
    </shape> 
</item> 
</selector> 

мне нужно изменить как сплошные цвета, и я не знаю, как Acces их. Я уже пробовал использовать кнопки изображения, но ничего не происходит.

ответ

1

создайте еще один state_corners с желаемыми цветами и измените чертежи, как вы пожелаете

+0

как сделать Я изменяю чертежи? Я устанавливаю фон, где я устанавливаю drawable, но он не изменится, на самом деле, он потеряет допустимый по умолчанию – n4h1n

0

вы не можете получить состояния StateListDrawable поэтому его не представляется возможным, чтобы изменить его (если вы не создали SLD с помощью CTOR по умолчанию и addState() метод), но вы всегда можете создать новый SLD и addState() s

0

Насколько я знаю, для достижения того, что вы хотите, вы должны создать форму, вытягиваемую во время выполнения, а затем вы можете создать список состояний для установки в качестве фона. Вы можете создать форму вытяжке во время выполнения этого кода

ShapeDrawable footerBackground = new ShapeDrawable(); 

// The corners are ordered top-left, top-right, bottom-right, 
// bottom-left. For each corner, the array contains 2 values, [X_radius, 
// Y_radius] 
float[] radii = new float[8]; 
radii[0] = activity.getResources().getDimension(R.dimen.footer_corners); 
radii[1] = activity.getResources().getDimension(R.dimen.footer_corners); 

radii[2] = activity.getResources().getDimension(R.dimen.footer_corners); 
radii[3] = activity.getResources().getDimension(R.dimen.footer_corners); 

footerBackground.setShape(new RoundRectShape(radii, null, null)); 

int color = ((Application) activity.getApplication()).getColor(); 

footerBackground.getPaint().setColor(color); 

views.setBackgroundDrawable(footerBackground); 

Эта часть взята из принятого ответа на это так оставлять Android: Change Shape Color in runtime

См документы о создании цвета список состояний во время выполнения http://developer.android.com/reference/android/content/res/ColorStateList.html

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