7

I have a ListView which has custom elements inside of it. I want to create selectors for each of those elements. Selectors themselves will not be very complicated because they need to handle only background color while item is hovers/selected/etc. However colors for those selectors have to come from external source that is I need to be able to set them from variables, so some simple static code will not do.

  1. How to define sector with all it`s parameters programmatically?
  2. How to assign that selector programmatically to a specific view?

2 Answers 2

13
StateListDrawable states = new StateListDrawable(); int yourBackgroundColor = Color.parseColor("#FFFFFF"); // Add specific color when your view has state 'pressed' states.addState(new int[] {android.R.attr.state_pressed}, new ColorDrawable(yourBackgroundColor)); // Add other states wanted and associated drawable // ... // As StateListDrawable extend Drawable, you can use it as background for exemple yourView.setBackground(states); 

You can add states as many as you want into your StateListDrawable (List of states available: http://developer.android.com/guide/topics/resources/color-list-resource.html). For each states combination you can set specific and dynamic drawable.

You can specify multiple states to match for a drawable

states.addState(new int[] { -android.R.attr.state_focused, android.R.attr.state_selected, -android.R.attr.state_pressed}, ColorDrawable(yourBackgroundColor)); 

This time the color will be applied if your view is not focused, is selected and is not pressed.

Sign up to request clarification or add additional context in comments.

Comments

1
StateListDrawable states = new StateListDrawable(); int yourBackgroundColor = Color.parseColor("#FFFFFF"); // Add specific color when your view has state 'pressed' states.addState(new int[] {android.R.attr.state_pressed}, new ColorDrawable(yourBackgroundColor)); // Add other states wanted and associated drawable // ... // As StateListDrawable extend Drawable, you can use it as background for exemple yourView.setBackground(states); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.