0

我有一个连接到 onTouch 侦听器的 toggleButton,当我按下按钮时,图像会发生变化,文本也会发生变化。当我放手时,图像应该变回来,文本也应该变回来。除了我放开按钮之外,一切都很好,文本只改变了几分之一秒,然后返回到“打开”文本。图像工作正常,这是为什么呢?

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"
        />    

爪哇:

  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;
    }
}
4

1 回答 1

2

ToggleBUtton有自己的监听器来改变它的状态。由于您返回 false,因此会发生以下情况:

1)onTouch发生,所以按钮状态改变ON-->OFF

2)listener然后调用toogle按钮(因为你返回false,事件没有被消费),所以状态改变OFF --> ON

只需删除以下行,现在当您释放切换按钮时,文本将发生变化。

((ToggleButton) v).setChecked(true);

((ToggleButton) v).setChecked(false);

更新,因为您需要在触摸按钮时更改文本(而不是在触摸释放后)。

return true

从触摸监听器,不会调用切换按钮的监听器。

或者,正如您所提到的,只需使用普通按钮:)

于 2013-10-30T10:59:48.200 回答