5

問題の説明:

私はにを持っていてTextViewRelativeLayoutユーザーがそれに触れたときにそれを赤に着色し、彼がそれをクリックしたときに別のページに移動したいと思います。OnClickListenerそこで、クリックOnTouchListenerを実行するように、タッチ機能を実装するようにを設定しようとしましたMotionEvent.ACTION_DOWNが()、機能しなくなるため、この組み合わせは機能しません(理由OnTouchListenerOnClickListenerわかりません)。

フォーラムではOnClick、OnTouchMotionEvent.ACTION_UPで実装できると言われていますが、これは私のレイアウトからトリガーされる可能性がありTextView(TextViewを押して指をドラッグして離すと、TextViewがクリックされます)、これは望ましい動作ではありません。私が欲しいので:
クリック=TextViewのプレス+リリース。

誰かが私にこれに対する解決策を教えてもらえますか?

4

3 に答える 3

21

action_up 時に View.performClick() を呼び出すことができます。それが役に立てば幸い。

your_txtView.setOnClickListener(new TextView.OnClickListener(){
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

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

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

        return true;
    }
    });
于 2012-03-10T08:12:54.140 に答える
3

Adel さん、問題は最初のクリックですか、それともまったくクリックしませんか?

複数のクリック可能なレイアウトがある場合、最初のクリック イベントが取得されない場合、この問題が発生します。これは、最初に選択してからクリックイベントを取得するためです。以下のコードを試してください。

private class CustomTouchListener implements OnTouchListener {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        TextView tv = (TextView) v.findViewById(R.id.single_line_text);
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            tv.setTextColor(COLOR_WHEN_PRESSED);
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
            // Action of click goes here
        } else if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            tv.setTextColor(COLOR_WHEN_RELEASED);
                            // To handle release outside the layout region
        }
        return false;
    }
}

レイアウトにタッチリスナーを設定すると、これは現在の実装で機能しています。

また、レイアウトで以下を設定する必要があります

android:focusable="true"
android:focusableInTouchMode="true"
android:clickable="true"

それが役に立てば幸い!!!

編集: さらに、DOWN と UP の両方にフラグが必要です。DOWN にセットし、UP にセットされているかどうかを確認します。これにより、ユーザーが画面内の任意の場所をタップし、テキストビューにカーソルを合わせて放すバグを回避できます。

于 2011-10-10T19:32:39.730 に答える
2

同じ問題がありました。ACTION_MOVE から false を返すことで解決しました。私は数時間それと戦い、さまざまなことを試してきましたが、この小さな問題を見落としていたようです...そして今、それは理にかなっています. onTouch から true を返すと、以降の処理が停止されるため、OnClickListener は動きを認識せず、ポインターがビューの外に移動した後でも onClick をトリガーします。

于 2012-04-29T23:21:59.847 に答える