最近使用Android原生的Switch控件的時(shí)候,發(fā)現(xiàn)了一個(gè)問(wèn)題鹿寻。SDK版本是22睦柴,運(yùn)行在Android5.1.1上,Switch的滑塊(thumb)用手拖動(dòng)到滑軌(track)中間的時(shí)候毡熏,不放手停頓一會(huì)爱只,滑塊就會(huì)卡在Switch中間不動(dòng)了,復(fù)現(xiàn)的幾率還很高。我不知道是Android原生switch控件的問(wèn)題恬试,還是我其他設(shè)置的問(wèn)題窝趣。先說(shuō)一下我是怎么使用的吧。
switch的xml布局
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:switchMinWidth="20dp"
android:textOff="Off"
android:textOn="On"
android:thumb="@drawable/thumb"
android:track="@drawable/track" />
布局文件沒(méi)什么好說(shuō)的训柴,就是switch的一般用法哑舒。
switch在code中的使用
private void initSwitch(final Switch aSwitch, String key) {
// 初始化Switch狀態(tài)
boolean flag = getAppParamBoolean(key);
mSwitch.setChecked(flag);
mSwitch.setSwitchTextAppearance(this, flag ? R.style.s_true : R.style.s_false);
mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
// 控制Switch字體顏色
mSwitch.setSwitchTextAppearance(MainActivity.this, b ? R.style.s_true : R.style.s_false);
}
});
}
上面的代碼就是switch在代碼中的使用,我這里把對(duì)switch的操作全部放到了initSwitch
方法里面幻馁,傳入兩個(gè)參數(shù):第一個(gè)參數(shù)傳入switch控件洗鸵,第二個(gè)參數(shù)是一個(gè)key,是用getAppParamBoolean(key)
從數(shù)據(jù)庫(kù)里面取到儲(chǔ)存的switch的狀態(tài)仗嗦,當(dāng)然這不重要膘滨。除此之外沒(méi)有別的地方對(duì)switch控件進(jìn)行處理的地方,但是運(yùn)行之后稀拐,就會(huì)出現(xiàn)文章開(kāi)頭出現(xiàn)的狀況火邓。
重點(diǎn)來(lái)了,下面是解決方法
針對(duì)這種狀況德撬,我上網(wǎng)找了找铲咨,也沒(méi)找到很符合的情況以及處理方法。最后我也是調(diào)了很久蜓洪,最后還是選了一個(gè)簡(jiǎn)單的投機(jī)取巧的方法纤勒。直接上代碼:
mSwitch.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == ACTION_UP) {
// 解決Switch滑塊拖到中間停住問(wèn)題
mSwitch.setChecked(mSwitch.isChecked());
}
return false;
}
});
------ 在剛剛的initSwitch
方法里面加上上面的代碼。思路是這樣的:之前描述了問(wèn)題的‘癥狀’隆檀,用手拖動(dòng)滑塊到中間的時(shí)候停頓幾秒摇天,松開(kāi)手就有幾率出現(xiàn)滑塊卡在滑軌中間的情況。在松開(kāi)手的時(shí)候會(huì)觸發(fā)onTouch
事件的ACTION_UP
恐仑,于是我在switch的觸碰監(jiān)聽(tīng)(OnTouch)的ACTION_UP
情況里面泉坐,再次setCheck
了一下我的switch控件,所以當(dāng)你松開(kāi)手的時(shí)候菊霜,switch的滑塊就不會(huì)停住了。
OK济赎,不管怎么樣鉴逞,經(jīng)過(guò)上面的處理,我也沒(méi)有再發(fā)現(xiàn)什么問(wèn)題了司训。所以在博客里面記錄一下构捡,希望看到本文的朋友,能去嘗試一下壳猜」椿眨或者知道什么原因的大神,可以不吝評(píng)論统扳,為我點(diǎn)解一下喘帚,問(wèn)題出在什么地方畅姊。謝謝!