android背景画像と状態切替
6620 ワード
android SDKでは、色の状態背景について説明します.http://developer.android.com/guide/topics/resources/color-list-resource.html
ネットで翻訳記事を見つけました.http://wiki.eoeandroid.com/Color_StateList
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の方法は以下の通りです.
次はselectorでviewの背景色を変えます.
以上の2枚の図は、1枚目はブットンの正常な状態で表示される背景色で、2枚目は押した状態での背景色です.
上の2つの図では、1枚目は1つ目の入力枠でフォーカスを取得すると灰色が表示され、2番目の入力枠はフォーカスを失った状態で黄色が表示されます.2枚目は、1番目の入力枠がフォーカスを失い、2番目の入力枠がフォーカスを取得した状態です.
btnmuselector.xml
テックス.xml
デモ: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を追加して画像を設定します.
具体的なコードは以下の通り実現されます.
ネットで翻訳記事を見つけました.http://wiki.eoeandroid.com/Color_StateList
, , , ,android selector 。 , , 。 , , 。
1、viewの状態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の背景色を変えます.
以上の2枚の図は、1枚目はブットンの正常な状態で表示される背景色で、2枚目は押した状態での背景色です.
上の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