4

私は新しいアプリを開発していますが、それが可能かどうか大きな疑問がありましたか? 私の疑問は

アプリケーション全体に対して 1 回限りのリスナーを設定する必要があります。また、アプリケーションで発生するタッチ イベントに対して一連のコードを実行する必要があります。たとえば。アプリには n 個のアクティビティがある場合があります。ただし、すべてのアクティビティに対して 1 回のリスナーを設定し、n 個のアクティビティのいずれかでタッチが発生したときにセット コードを実行する必要があります。私はそれのために多くのことを試みました。どんなアイデアでも大歓迎です。前もって感謝します。

4

6 に答える 6

2

非表示で、すべての画面を取得し、onTouchEventを使用して必要な操作を実行するカスタムビューを作成できます。

次に、そのビューを一番上に(おそらくFrameLayoutに)含めるために、すべてのレイアウトファイルを用意する必要があります。

于 2012-09-25T07:08:47.733 に答える
1

できることは、アプリケーション内の他のすべてのアクティビティによって拡張される基本アクティビティクラスを作成することです。public boolean dispatchTouchEvent (MotionEvent ev)次に、この基本アクティビティのメソッドをオーバーライドできます。このオーバーライドされた実装は、すべてのタッチイベントが発生する単一の場所になります。

ただし、重要な注意点が1つあります。これは、すべてのアクティビティが同じタイプである場合にのみ機能します(たとえば、すべてがActivitiyタイプであるか、すべてがタイプであるListActivity) 。

于 2012-09-25T07:08:14.117 に答える
0

完全に可能です。

イベントをMyTouchActivityオーバーライドする(または何か)というアクティビティを作成し、話しているコードを記述します。onTouchset

そして今、残りのすべてのアクティビティは、通常のアクティビティの代わりにn拡張する必要があります。MyTouchActivityこのようにして、そのコードはn個のアクティビティすべてに継承されます。MyTouchListActivitySeperate (ListActivityの場合)とMyTouchMapActivity(MapActivityの場合)を作成する必要があります

もう1つの方法は、Ontouch LIstenerを作成しonTocuh、各アクティビティの各イベントをオーバーライドして、最初にリスナーを呼び出すことです。しかし、それは面倒です。

于 2012-09-25T07:09:01.310 に答える
0

これをアプリ全体で使用する場合は、ActionBarActivity (または SherlockActivity) から拡張するクラスを作成する必要があります。

public class MyCustomActivity extends ActionBarActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FrameLayout decorView = (FrameLayout) getActivity().getWindow().getDecorView();
        decorView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d(TAG, "Click X:" + event.getX() + " Y:" + event.getY());
                return false;
            }
        });
    }
}

次に、MyCustomActivity から他のすべてのアクティビティを拡張します。

public class MainActivity extends MyCustomActivity{ }

すべてのタッチイベントが TouchListener イベントを通過するよりも

于 2015-02-10T13:07:33.300 に答える