Dynamically defining and using selectors

一世执手 提交于 2019-11-27 18:33:45

问题


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?

回答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);

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.




回答2:


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);


来源:https://stackoverflow.com/questions/12754067/dynamically-defining-and-using-selectors

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!