android背景画像と状態切替


android SDKでは、色の状態背景について説明します.http://developer.android.com/guide/topics/resources/color-list-resource.html
ネットで翻訳記事を見つけました.http://wiki.eoeandroid.com/Color_StateList
 
	     ,        ,               ,         ,android selector        。               ,             ,             。       ,              ,                。
 
1、viewの状態
  • android:state_presed Boolean   コントロールが押された時にtrueに戻ります.デフォルトはfalseです
  • android:state_focused Boolean  コントロールがフォーカスを得るとtrueに戻ります.デフォルトはfalseです.ここで使用シーンを説明します.「シミュレータが見やすい」というのは、スライドやキーボードの方向ガイドキーを使ってコントロールにナビゲーションすると、このコントロールに焦点がかかります.もちろん他のクリック、選択、カーソルなどもフォーカスしてフォローします.
  • android:state_selected Boolean  コントロールが選択されたときにtrueに戻ります.デフォルトはfalseです.例えば、tabが開けられます.
  • android:state_checkbale Boolean  コントロールが選択状態にあるときはtrueを返します.デフォルトはfalseです.この属性と以下のcheck属性は、オプションとオプションの両方の状態で遷移するコントロール
  • だけに使用されることを示している.
  • android:state_checed Boolean  コントロールが選択されたときにtrueに戻ります.デフォルトはfalseです
  • android:state_enaboled Boolean  コントロールが利用可能な場合はtrueを返します.デフォルトはfalseです
  • android:state_windowfocused Boolean  アプリケーションのウィンドウがフォーカス状態にあるときにtrueに戻ります.ウィンドウがフォーカスを失ったときにfalseに戻ります.バックグラウンドでfalseに戻ります.例えば、通知カバーが開いたときや、ペアボックスが現れたときなどです.後ろのウィンドウはフォーカスが外れています.
  • statemuselectedとstate facusedの違い:
    Viewのソースコードを調べます.その中のsetSelectの方法は以下の通りです.
    /**
         * Changes the selection state of this view. A view can be selected or not.
         * Note that selection is not the same as focus. Views are typically
         * selected in the context of an AdapterView like ListView or GridView;
         * the selected view is the view that is highlighted.
         *
         * @param selected true if the view must be selected, false otherwise
         */
        public void setSelected(boolean selected) {
            if (((mPrivateFlags & SELECTED) != 0) != selected) {
                mPrivateFlags = (mPrivateFlags & ~SELECTED) | (selected ? SELECTED : 0);
                if (!selected) resetPressedState();
                invalidate();
                refreshDrawableState();
                dispatchSetSelected(selected);
            }
        } 
    注:selectedはfocus状態と違って、通常はAdapterViewのようなListViewまたはGridViewのようなAdapterViewの下にあるViewがあります. selected状態であり、この状態を得たViewは明るい状態にある.
     
    次はselectorでviewの背景色を変えます.
    android背景图片及状态切换_第1张图片 android背景图片及状态切换_第2张图片
    以上の2枚の図は、1枚目はブットンの正常な状態で表示される背景色で、2枚目は押した状態での背景色です.
    android背景图片及状态切换_第3张图片
    上の2つの図では、1枚目は1つ目の入力枠でフォーカスを取得すると灰色が表示され、2番目の入力枠はフォーカスを失った状態で黄色が表示されます.2枚目は、1番目の入力枠がフォーカスを失い、2番目の入力枠がフォーカスを取得した状態です.
     
     btnmuselector.xml
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@color/blue" android:state_pressed="true"/>
        <item android:drawable="@color/orange"/>
    
    </selector>
     
    テックス.xml
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:drawable="@color/gray" android:state_focused="true"/>
        <item android:drawable="@color/orange"/>
    
    </selector>
     
    デモ:http://download.csdn.net/detail/ff20081528/6704895
    2013-12-14追加
    2、StteListDrawableの紹介
    このクラスは、様々な状態の値に対応する画像リソースを定義しています.つまり、このクラスを利用して様々な状態の値を保存できます.つまり、selectorのコード表現です.
    これらを利用して上記の効果を実現します.まず、このような重要な方法を紹介します.
    void
    addState(int[]stateセット、  Drawable drawable
    Add a new image/string ID to the set of images.画像またはリソース参照idを追加して画像を設定します.
    具体的なコードは以下の通り実現されます.
    package org.sunday.main;
    
    import android.os.Bundle;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.graphics.drawable.Drawable;
    import android.graphics.drawable.StateListDrawable;
    import android.view.Menu;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		Button btn = (Button) findViewById(R.id.btn);
    		btn.setBackgroundDrawable(createBtnDrawable());
    		EditText et1 = (EditText) findViewById(R.id.et1);
    		et1.setBackgroundDrawable(createEtDrawable());
    		EditText et2 = (EditText) findViewById(R.id.et2);
    		et2.setBackgroundDrawable(createEtDrawable());
    	}
    	
    	//  Button Drawable
    	private StateListDrawable createBtnDrawable() {
    		StateListDrawable sld = new StateListDrawable();
    		//  Android        attr   
    		int pressed = android.R.attr.state_pressed;  
    		sld.addState(new int []{pressed}, getResources().getDrawable(R.color.blue));  
    		//       ,          
    		sld.addState(new int []{}, getResources().getDrawable(R.color.orange));  
    		return sld;
    	}
    	
    	//  EditText Drawable
    	private StateListDrawable createEtDrawable() {
    		StateListDrawable sld = new StateListDrawable();
    		//  Android        attr   
    		int focused = android.R.attr.state_focused;  
    		sld.addState(new int []{focused}, getResources().getDrawable(R.color.gray));  
    		//       ,          
    		sld.addState(new int []{}, getResources().getDrawable(R.color.orange));  
    		return sld;
    	}
    
    }
    
    デモ:http://download.csdn.net/detail/ff20081528/6713307