clicklistener和longclicklistener在同一个按钮上?

时间:2012-07-07 11:05:07

标签: android onclick actionlistener phone-call long-click

我正在创建一个呼叫/拨号按钮,当我点击该呼叫/拨号按钮时,将根据edittext中显示的输入进行呼叫。我设法做到了那一部分。你们可以告诉我,我是否可以长时间点击同一个电话/拨号按钮,以便吐司可以出来要求用户选择其他东西?

我对“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);

    }

此代码正常运行。我希望可以在同一个呼叫/拨号按钮上进行更长时间的点击,这样按钮就可以正常点击进行通话,而长按则可以弹出祝酒词。提前谢谢。

3 个答案:

答案 0 :(得分:5)

请注意,在长按一下监听器上返回“false”会让UI响应长按一下,也可以短按一下。如果你想杀死它,请返回“true”。 “True”表示“是的,我使用过此事件”,“false”表示“无论我是否使用过,环境都可以自由回应”。 (我知道这是因为我在我自己的应用程序中使用了AkashG的答案。)

答案 1 :(得分: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(new OnClickListener(){

            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;

答案 2 :(得分:0)

带有SimpleOnGestureListener的GestureDetector可以帮助您区分不同类型的印刷机。 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是一个非常好的课程,可以进行一些研究,它可以非常有用并且不会太复杂。希望这会有所帮助。