2013-10-25 83 views
0

此刻我有一個切換按鈕,它調用一個方法,如果我按下它,togglebutton被禁用,代碼運行並且按鈕被重新啓用,如果我再次按下它,同樣的事情再次回到它的原始狀態。我想改變它,這樣當按鈕被按下時,它會改變狀態並運行代碼,當我放開時,它會變回。我怎樣才能做到這一點?我可以在這種方法中設置某種監聽器,它是如何完成的?所以我在這個方法中設置了clicklistener,在這個句柄上,在這裏調用了什麼按鈕,我必須給它一個名字來附加listener?動作按鈕按下和釋放

public void pushtotalk3(final View view) { 

       //if more than one call, change this code 
        int callId = 0; 
        for (SipCallSession callInfo : callsInfo) { 
         callId = callInfo.getCallId();      
        } 
        final int id= callId; 

     final boolean on = ((ToggleButton) view).isChecked(); 
     ((ToggleButton) view).setEnabled(false); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        if (on) { 
         OnDtmf(id, 17, 10); 
         Thread.sleep(10); 
         OnDtmf(id, 16, 9); 
        runOnUiThread(new Runnable() { 
          public void run() { 
           ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy); 
           ((ToggleButton) view).setEnabled(true); 
          } 
         }); 
        } else { 
         OnDtmf(id, 18, 11); 
         Thread.sleep(10); 
         OnDtmf(id, 18, 11); 
         runOnUiThread(new Runnable() { 
          public void run() { 
           ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy); 
           ((ToggleButton) view).setEnabled(true); 
          } 
         }); 
        } 
       } catch (InterruptedException e) { 
        Log.d(TAG, "Failed to send: " + e.getMessage()); 
       } 
      } 
     }).start(); 
    } 

編輯:特別是我想知道如何在使用按鈕的「方法版本」中做到這一點。 「,而不是將OnClickListener應用於活動中的按鈕,您可以使用android:onClick屬性爲您的按鈕在XML佈局中指定一個方法」

我是否將視圖轉換爲togglebutton並使用它?

回答

1

試試這個:

ToggleButton yourBtn = (ToggleButton) findViewById(R.id.yourbtnid) 
    yourBtn.setOnTouchListener(new OnTouchListener() { 

         @Override 
         public boolean onTouch(View v, MotionEvent event) { 
          switch (event.getAction()) { 
          case MotionEvent.ACTION_DOWN: { 

           //press 
           ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy); 
           ((ToggleButton) view).setEnabled(true); 


           return true; 
          } 
          case MotionEvent.ACTION_UP: { 

           //release 
           ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy); 
           ((ToggleButton) view).setEnabled(true); 

           return true; 
          } 
          default: 
           return false; 
          } 
         } 

        }); 

試試這個,如果你想用的onClick方法調用,但我不承諾什麼:

public void touchButton(View view) { 
     view.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 

       //press 
       ((ToggleButton) view).setBackgroundResource(R.drawable.btn_blue_glossy); 
       ((ToggleButton) view).setEnabled(true); 


       return true; 
      } 
      case MotionEvent.ACTION_UP: { 

       //release 
       ((ToggleButton) view).setBackgroundResource(R.drawable.btn_lightblue_glossy); 
       ((ToggleButton) view).setEnabled(true); 

       return true; 
      } 
      default: 
       return false; 
      } 
     } 
    }); 
    } 

,並把這個變成你的XML文件:

android:onClick="touchButton" 
+0

你好,謝謝你的回答,據我瞭解,有兩種方法可以引用你的按鈕,這種方法,或者給按鈕一個名字在xml中調用該方法,我想知道另一個版本,我在哪裏調用方法名稱。 – Paul

+0

你不能使用XML屬性調用onTouch,你只能從XML調用onClick屬性(android:onClick =「nameAction」),但沒有android:onTouch =「actiontouch」 – Ezrou

+0

哦,這太可惜了,我真的很喜歡那種方法做事。謝謝 – Paul

1
button.setOnTouchListener(new OnTouchListener() { 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if(event.getAction() == MotionEvent.ACTION_DOWN) { 

    } else if (event.getAction() == MotionEvent.ACTION_UP) { 

    } 
} 
    }; 

希望這會幫助你ü

+0

謝謝你,很好的回答,我已經編輯了我的問題與另一個問題:) – Paul