就是很像開關的那種控件,它隻有兩個狀态:on和off:在IOS中,有個UISwitch控件,其效果圖,如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0MTM0YTMfRVR0I1XyQTO1kDMvwlNwMDMvwlMxAjMvwVZjFGcz9CXzRWYvxGc19CX0VmbuEmbph2Yz9mLjlGdhR3cvw1LcpDc0RHaiojIsJye.png)
在android4.0裡面,添加了一個和這個類似的控件:Switch,很形象,開關。效果圖如下:
其類關系圖如下:
java.lang.Object | |
↳ | android.view.View |
↳ | android.widget.TextView |
↳ | android.widget.Button |
↳ | android.widget.CompoundButton |
↳ | android.widget.Switch |
父類:compoundButton。
類的概述:
Switch是一個可以在兩種狀态切換的開關控件。使用者可以拖動"thumb"來回選擇,也可以像選擇複選框一樣點選切換Switch的狀态。
主要方法:
Public Methods | |
---|---|
int | getCompoundPaddingRight() Returns the right padding of the view, plus space for the right Drawable if any. |
CharSequence | getTextOff() Returns the text displayed when the button is not in the checked state. |
CharSequence | getTextOn() Returns the text displayed when the button is in the checked state. |
void | jumpDrawablesToCurrentState() Call on all Drawable objects associated with this view. |
void | onMeasure(int widthMeasureSpec, int heightMeasureSpec) Measure the view and its content to determine the measured width and the measured height. |
void | onPopulateAccessibilityEvent( AccessibilityEvent event) Called from giving a chance to this View to populate the accessibility event with its text content. |
boolean | onTouchEvent( MotionEvent ev) Implement this method to handle touch screen motion events. |
void | setChecked(boolean checked) Changes the checked state of this button. |
void | setSwitchTextAppearance( Context context, int resid) Sets the switch text color, size, style, hint color, and highlight color from the specified TextAppearance resource. |
void | setSwitchTypeface( Typeface tf, int style) Sets the typeface and style in which the text should be displayed on the switch, and turns on the fake bold and italic bits in the Paint if the Typeface that you provided does not have all the bits in the style that you specified. |
void | setSwitchTypeface( Typeface tf) Sets the typeface in which the text should be displayed on the switch. |
void | setTextOff( CharSequence textOff) Sets the text displayed when the button is not in the checked state. |
void | setTextOn( CharSequence textOn) Sets the text displayed when the button is in the checked state. |
getCompoundPaddingRight():沒弄清楚什麼意思。
在TextView中的源碼:
jumpDrawableToCurrentState():在與Switch相關的Drawable操作時調用 Drawable.jumpToCurrentState()這個方法。public int getCompoundDrawablePadding() { final Drawables dr = mDrawables; return dr != null ? dr.mDrawablePadding : 0; }
getTextOff()、getTextOn()、 setTextOff()、setTextOn()這四個方法比較簡單,就是設定和擷取非選中和選中狀态下的文本值。
onMeasure():測量控件寬高,供繪圖時使用。
onTouchEvent(MotionEvent ev)實作這一方法傳遞觸摸屏運動事件。
setChecked()設定Switch的狀态(選中,非選中)
setSwitchTextAppearance()設定字型大小
setSwitchTextTypefaces設定字型格式
看看google官方在/frameworks/base/core/res/res/values/styles.xml的一個定義:
<style name="Widget.Holo.CompoundButton.Switch">
<item name="android:track">@android:drawable/switch_track_holo_dark</item>
<item name="android:thumb">@android:drawable/switch_inner_holo_dark</item>
<item name="android:switchTextAppearance">@android:style/TextAppearance.Holo.Widget.Switch</item>
<item name="android:textOn">@android:string/capital_on</item>
<item name="android:textOff">@android:string/capital_off</item>
<item name="android:thumbTextPadding">12dip</item>
<item name="android:switchMinWidth">96dip</item>
<item name="android:switchPadding">16dip</item>
</style>
可以在main.xml中這樣定義:
<Switch
android:id="@+id/demo_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
android:textOn="開"
android:textOff="關"
/>
當Switch狀态切換時:
mSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
//選中時 do some thing
statusText.setText("開");
} else {
//非選中時 do some thing
statusText.setText("關");
}
}
});
基本上先簡單的講到這。