設置TextView、Button、ImageView在不同狀態下的背景/前景顯示效果

1 篇文章 / 0 new
author
設置TextView、Button、ImageView在不同狀態下的背景/前景顯示效果
對TextView設置 ColorStateList 使其在Normal、Pressed、Focused、Unable四種狀態下顯示不同的顏色。StateListDrawable可直接使用圖片應用在相似場合。
public class ActColorStateList extends Activity implements OnClickListener {
        private TextView txtShow;
 
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                txtShow = (TextView) findViewById(R.id.txtShow);
                txtShow.setText("Norma Pressed Focused Unable");
                txtShow.setTextColor(createColorStateList(0xffffffff, 0xffffff00, 0xff0000ff, 0xffff0000));
                txtShow.setOnClickListener(this);
        }
 
        /** 對TextView設置不同狀態時其文字顏色。 */
        private ColorStateList createColorStateList(int normal, int pressed, int focused, int unable) {
                int[] colors = new int[] { pressed, focused, normal, focused, unable, normal };
                int[][] states = new int[6][];
                states[0] = new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled };
                states[1] = new int[] { android.R.attr.state_enabled, android.R.attr.state_focused };
                states[2] = new int[] { android.R.attr.state_enabled };
                states[3] = new int[] { android.R.attr.state_focused };
                states[4] = new int[] { android.R.attr.state_window_focused };
                states[5] = new int[] {};
                ColorStateList colorList = new ColorStateList(states, colors);
                return colorList;
        }
 
        /** 設置Selector。 */
        public static StateListDrawable newSelector(Context context, int idNormal, int idPressed, int idFocused,
                        int idUnable) {
                StateListDrawable bg = new StateListDrawable();
                Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);
                Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);
                Drawable focused = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);
                Drawable unable = idUnable == -1 ? null : context.getResources().getDrawable(idUnable);
                // View.PRESSED_ENABLED_STATE_SET
                bg.addState(new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled }, pressed);
                // View.ENABLED_FOCUSED_STATE_SET
                bg.addState(new int[] { android.R.attr.state_enabled, android.R.attr.state_focused }, focused);
                // View.ENABLED_STATE_SET
                bg.addState(new int[] { android.R.attr.state_enabled }, normal);
                // View.FOCUSED_STATE_SET
                bg.addState(new int[] { android.R.attr.state_focused }, focused);
                // View.WINDOW_FOCUSED_STATE_SET
                bg.addState(new int[] { android.R.attr.state_window_focused }, unable);
                // View.EMPTY_STATE_SET
                bg.addState(new int[] {}, normal);
                return bg;
        }
 
        @Override
        public void onClick(View v) {
                if (v == txtShow) {
                        txtShow.setEnabled(false);
                }
        }
}
from http://blog.csdn.net/sodino/article/details/6797821
Free Web Hosting