[Android]程式碼實現ColorStateList及StateListDrawable
from :
http://blog.csdn.net/sodino/article/details/6797821
優點:靈活,減少xml的編寫。應用在TextView的文字時,亦避免使用了OnTouchListener。
用途:動態設定TextView、Button、ImageView等元件在不同狀態下的背景/前景顯示效果。
參考:
[AndroidOpenSource]\frameworks\base\core\Java\Android\view\view.xml
[AndroidOpenSource]\frameworks\base\core\res\res\values\public.xml
效果圖如下:
程式碼如下:
- package lab.sodino.statelist;
- import android.app.Activity;
- import android.content.Context;
- import android.content.res.ColorStateList;
- import android.graphics.drawable.Drawable;
- import android.graphics.drawable.StateListDrawable;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.TextView;
- /**
- * 對TextView設定ColorStateList使其在Normal、Pressed、Focused、Unable四種狀態下顯示不同的顏色。<br/>
- * 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("Sodino\nNormal:0xffffffff\nPressed:0xffffff00\nFocused:0xff0000ff\nUnable:0xffff0000");
- 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);
- }
- }
- }
相關文章
- Android 熱更新實現原理及程式碼分析Android
- Android圖片壓縮實現過程及程式碼Android
- DES原理及程式碼實現
- Android黑白棋遊戲實現過程及程式碼解析Android遊戲
- Android 最流行的吸頂效果的實現及程式碼Android
- 瀑布流程式碼實現及思路
- CNN介紹及程式碼實現CNN
- BiLSTM介紹及程式碼實現
- Android MarsDaemon實現程式及Service常駐Android
- android 自定義ScrollView實現背景圖片伸縮的實現程式碼及思路AndroidView
- Android Studio實現程式碼混淆Android
- Android程式碼實現自定義ButtonAndroid
- 在程式碼中實現android:tint效果Android
- JavaScript中的繼承及實現程式碼JavaScript繼承
- Java實現SSH模式加密原理及程式碼Java模式加密
- UITableView的原理——探究及重新實現程式碼UIView
- Android端程式碼染色原理及技術實踐Android
- JavaScript簡單抽獎程式的實現及程式碼JavaScript
- 程式碼安全之程式碼混淆及加固(Android)?Android
- Android使用程式碼實現關機/重啟Android
- Android左右滑動效果的程式碼實現Android
- Android中SurfaceView視訊播放實現程式碼AndroidView
- WIN10UI—實現思路分享及程式碼Win10UI
- layui 下拉框搜尋及程式碼實現UI
- zookeeper 主要應用場景及程式碼實現
- ECharts實現資料圖表分析及程式碼Echarts
- Android系統截圖的實現(附程式碼)Android
- 簡單工廠模式(simple factory)及程式碼實現模式
- Android沉浸式UI實現及原理AndroidUI
- Android 沉浸式 UI 實現及原理AndroidUI
- 4 行程式碼實現 Android 快速檔案下載行程Android
- Android自定義圓形進度條實現程式碼Android
- 常見排序演算法原理及JS程式碼實現排序演算法JS
- 音視訊同步!RTCP 協議解析及程式碼實現TCP協議
- Promise 程式碼實現Promise
- 實現彩色二維碼程式碼實
- Locust 程式碼指令碼實現指令碼
- android 系統重啟與關機:java 程式碼實現AndroidJava