2012-07-07 175 views
2

我正在創建一個呼叫/撥號按鈕,當我點擊該呼叫/撥號按鈕時,將根據edittext中顯示的輸入進行呼叫。我設法做到了這一點。你們能否告訴我,我是否可以再點擊一次相同的電話/撥號按鈕,以便敬酒可以出來要求用戶選擇其他的東西?clicklistener和longclicklistener在同一個按鈕上?

我做了一些關於「setOnLongClickListener」的研究,但我不確定我是否可以將它結合在相同的呼叫/撥號按鈕中?我附加了我設法實現的工作撥號功能,想知道「setOnLongClickListener」是否可以在代碼中組合在一起?

private void dialANumber() { 

    try { 
     buttonCall = (ImageButton) findViewById(R.id.imageButton2); 
     buttonCall.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       if (display != null) { 
        Intent callNumber = new Intent(); 
        callNumber 
          .setAction(android.content.Intent.ACTION_CALL); 
        callNumber.setData(Uri.parse("tel:" + display.getText())); 
        startActivity(callNumber); 
       } 
      } 
     }); 

    } catch (ActivityNotFoundException anfe) { 
     Log.e("DialANumber", "Dialing the number failed", anfe); 

    } 

該代碼正在工作。我希望可以在相同的呼叫/撥號按鈕上進行更長時間的點擊,以便該按鈕可以有正常的點擊撥打電話,而長按則彈出一個敬酒。提前致謝。

+2

你至少試過了嗎? – Blackbelt 2012-07-07 11:06:26

+0

是的,我做了..我改變按鈕=(按鈕)findViewById(R.id.call);進入buttonCall =(ImageButton)findViewById(R.id.imageButton2); – jason 2012-07-07 11:36:44

回答

0

是的,你可以這樣做:

XML文件:

<Button 
     android:id="@+id/call" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="CALL"/> 

    <ImageButton 
     android:id="@+id/callBtn" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/ic_launcher"/> 

對於按鈕單擊事件:

 Button button=(Button) findViewById(R.id.call); 
     button.setOnLongClickListener(new OnLongClickListener() { 

      public boolean onLongClick(View v) { 
       Toast.makeText(getBaseContext(), "Long CLick", Toast.LENGTH_SHORT).show(); 
       return false; 
      } 
     }); 

     button.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 


      if (display != null) { 
       Intent callNumber = new Intent(); 
       callNumber 
         .setAction(android.content.Intent.ACTION_CALL); 
       callNumber.setData(Uri.parse("tel:" + display.getText())); 
       startActivity(callNumber); 
      } 
      } 
     }); 

對於ImageButton的:

 ImageButton imageButton=(ImageButton) findViewById(R.id.callBtn); 

imageButton.setOnClickListener(新的OnClick偵聽器(){

  public void onClick(View v) { 
      if(check==false){ 
     Toast.makeText(getBaseContext(), "CLick", Toast.LENGTH_SHORT).show(); 
      } 
     imageButton.setOnLongClickListener(new OnLongClickListener() { 

      public boolean onLongClick(View v) { 
       check=true; 
      if(check){ 
       Log.d("bool", check+""); 
       Toast.makeText(getBaseContext(), "Long CLick", Toast.LENGTH_SHORT).show(); 
       check=false; 
      } 
       return false; 
      } 
     }); 

聲明此頂部(golbally):

boolean check=false; 
+0

嗨謝謝..我已經嘗試,但setOnLongClickListener提示3修復:更改爲setOnClickListener(..)',更改爲setOnKeyListener(..)'並更改爲setOnTouchListener(..)'... – jason 2012-07-07 11:32:52

+0

我想你必須在xml文件中聲明imageButton。將其更改爲只有按鈕,它不會要求您修復then.i實現它並工作正常。 – AkashG 2012-07-07 11:35:35

+0

我改變按鈕=(Button)findViewById(R.id.call);進入buttonCall =(ImageButton)findViewById(R.id.imageButton2);正如我做我的通話按鈕是imageButton,因爲我使它成爲圖像.. setOnLongclickListener無法在imageButton上工作? – jason 2012-07-07 11:39:40

0

一個GestureDetector與SimpleOnGestureListener會幫助你在不同類型的印刷機區分。 GestureDectector是一個可以讀取不同類型的觸摸事件(例如,單擊和長按)的類,並將它們發送給監聽器,該監聽器以不同方式處理每種類型。以下是關於Detector和Listener的文檔。

http://developer.android.com/reference/android/view/GestureDetector.html

http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html

首先,設置你的SimpleOnGestureListener,你重寫將onSingleTapUponLongPress的重要方法。在onCreate中,創建一個引用監聽器的GestureDetector實例。然後,將OnTouchListener附加到您的按鈕上,將事件發送到您的探測器。你會希望它看起來是這樣的:

//Set up the Detector 
GestureDetector.SimpleOnGestureListener myGestureListener = new GestureDetector.SimpleOnGestureListener() 
{ 
    @Override 
    public boolean onSingleTapUp(MotionEvent e) 
    { 
     //Your onClick code 
     return false; 
    } 

    @Override 
    public void onLongPress(MotionEvent e) 
    { 
     //Your LongPress code 
     super.onLongPress(e); 
    } 
}; 

//And make a variable for your GestureDetector 
GestureDetector myGestureDetector; 

... 

@Override 
onCreate(Bundle b) 
{ 
    ... 
    myGestureDetector = new GestureDetector(myActivity.this, myGestureListener); 
    ... 
} 

... 

//And finally, wherever you are setting up your button 
button.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) 
    { 
     myGestureDetector.onTouchEvent(motionEvent); 
     return false; 
    } 

有一個一堆你想獲得更看中其他類型的情況下,事件這個類可以理解的。 GestureDetector是一個非常好的類,可以做一些研究,它可能非常有用,並不太複雜。希望這可以幫助。

+0

嗨,那裏謝謝,我會盡快實現..我的筆記本電腦剛剛崩潰了幾天.. :-( – jason 2012-07-11 12:10:05

5

請注意,對長單擊偵聽器返回「false」會使用戶界面對長單擊作出響應。如果你想殺掉那個,返回「true」。 「真」是指「是的,我使用過這個事件」,「錯誤」是指「我是否使用過它,環境也可以自由迴應。」 (我知道這是因爲我只是在我自己的應用中使用了AkashG的答案。)

+0

要注意的點「請注意,返回」假「長按聽衆將有響應長按點的用戶界面短暫點擊「。自2小時以來一直在掙扎。 – 2014-08-21 19:46:26

相關問題