2

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

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

    }

此代码正在运行。我希望可以在同一个呼叫/拨号按钮上进行更长的单击,以便该按钮可以正常单击以拨打电话,并且单击更长的时间以弹出敬酒。提前致谢。

4

3 回答 3

7

请注意,在长单击侦听器上返回“false”将使 UI 也将长单击响应为短单击。如果你想杀死它,请返回“true”。“真”表示“是的,我使用了这个事件”,“假”表示“无论我是否使用,环境也可以自由响应”。(我知道这一点是因为我刚刚在自己的应用程序中使用了 AkashG 的答案。)

于 2013-04-05T15:28:02.960 回答
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) 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;
            }
        });

在顶部声明这个(全局):

boolean check=false;
于 2012-07-07T11:12:31.897 回答
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,你需要重写的重要方法是onSingleTapUpand onLongPress。在您的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 是一个非常好的类,可以做一些研究,它非常有用并且不太复杂。希望这可以帮助。

于 2012-07-07T13:16:47.740 回答