57

すべてのビューでタッチ イベントを無効にする最善の方法は何ですか?

4

14 に答える 14

60

ビュー グループのすべての子ビューを無効にする関数を次に示します。

 /**
   * Enables/Disables all child views in a view group.
   * 
   * @param viewGroup the view group
   * @param enabled <code>true</code> to enable, <code>false</code> to disable
   * the views.
   */
  public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
    int childCount = viewGroup.getChildCount();
    for (int i = 0; i < childCount; i++) {
      View view = viewGroup.getChildAt(i);
      view.setEnabled(enabled);
      if (view instanceof ViewGroup) {
        enableDisableViewGroup((ViewGroup) view, enabled);
      }
    }
  }
于 2012-01-13T11:12:15.333 に答える
18

あなたは試すことができます:

your_view.setEnabled(false);

タッチイベントを無効にする必要があります。

または、試すこともできます (Ercan に感謝):

@Override
public boolean dispatchTouchEvent(MotionEvent ev){      
  return true;//consume
}

また

public boolean dispatchTouchEvent(MotionEvent ev) {
    if(!onInterceptTouchEvent()){
        for(View child : children){
            if(child.dispatchTouchEvent(ev))
                return true;
        }
    }
    return super.dispatchTouchEvent(ev);
}
于 2011-12-13T13:12:53.437 に答える
14

inProgressこのコードは基本的に、変数が に設定されている場合にのみ、このイベントを親ビューに伝達し、タッチ イベントを許可しfalseます。

private boolean inProgress = false;

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (!inProgress)
        return super.dispatchTouchEvent(ev);
    return true;
 }
于 2016-09-15T09:09:01.203 に答える
4

すべてのビューを透明なビューでカバーし、すべてのタッチ イベントをキャプチャするのはどうでしょうか?

于 2013-08-01T07:19:11.583 に答える
3

私はこの方法を作りました。これは私にとって完璧に機能します。選択したビューのすべてのタッチ イベントを無効にします。

public static void disableView(View v) {

    v.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            return true;
        }
    });

    if (v instanceof ViewGroup) {
        ViewGroup vg = (ViewGroup) v;
        for (int i = 0; i < vg.getChildCount(); i++) {
            View child = vg.getChildAt(i);
            disableView(child);
        }
    }
}
于 2015-09-11T08:07:10.493 に答える
2

アプリケーション全体では不可能な場合があります。ビューごとに onTouchEvent() をオーバーライドし、ユーザー入力を無視する必要があります。

于 2011-03-24T11:50:01.070 に答える
-2

もう 1 つの簡単な方法は、レイアウト (つまり .xml) ファイルを使用して無効にすることです。追加するだけです。

 android:shouldDisableView="True"

必要なビューでは、タッチ イベントを無効にします。

于 2016-07-26T09:58:06.797 に答える