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」を返します。「true」は「はい、このイベントを使用しました」を意味し、「false」は「使用したかどうかにかかわらず、環境も自由に応答できる」ことを意味します。(私は自分のアプリで 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=(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 を設定します。オーバーライドする重要なメソッドは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 は、ちょっとした調査を行うのに非常に適したクラスです。非常に便利で、複雑すぎません。お役に立てれば。

于 2012-07-07T13:16:47.740 に答える