我有一个toggleButton连接到onTouch监听器,当我按下按钮时图像改变,文本也改变了。当我放手时,图像应该改回来,文本也应该改变。这一切都很好,除了当我松开按钮时,文本只会改变回来几分之一秒,然后返回到“on”文本。图像工作正常,为什么会这样?
的xml:
<ToggleButton
android:id="@+id/PTT_button5"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:text="@string/ptt5"
android:textOn="Push To Talk On"
android:textOff="Push To Talk Off"
android:background="@drawable/btn_lightblue_glossy"
android:textColor="@android:color/white"
android:textSize="15sp"
/>
的java:
public boolean onTouch(View v, MotionEvent event) {
if(!serviceConnected) {
return true;
}
int action = event.getAction();
try {
if(action == MotionEvent.ACTION_DOWN) {
service.sendDtmf(callId, KeyEvent.KEYCODE_STAR);
service.sendDtmf(callId, KeyEvent.KEYCODE_9);
((ToggleButton) v).setBackgroundResource(R.drawable.btn_blue_glossy);
((ToggleButton) v).setChecked(true);
} else if (action == MotionEvent.ACTION_UP) {
service.sendDtmf(callId, KeyEvent.KEYCODE_POUND);
service.sendDtmf(callId, KeyEvent.KEYCODE_POUND);
((ToggleButton) v).setBackgroundResource(R.drawable.btn_lightblue_glossy);
((ToggleButton) v).setChecked(false);
}
} catch (RemoteException e) {
Log.e(THIS_FILE, "Cannot ask sip service to send dtmf", e);
}
return false;
}
}
答案 0 :(得分:2)
ToggleBUtton
有自己的监听器来改变状态。由于您返回false,会发生什么:
1)onTouch
发生了,因此按钮状态已更改ON-->OFF
2)然后调用toogle按钮的listener
(因为您返回false,不消耗事件),因此状态更改OFF --> ON
只需删除以下行,现在释放切换按钮时文本将会改变。
((ToggleButton) v).setChecked(true);
和
((ToggleButton) v).setChecked(false);
更新,因为您需要在触摸按钮时更改文本(而不是在触摸释放后)。
return true
触摸监听器不会调用切换按钮的监听器。
或者,正如您所提到的,只需使用普通按钮:)