すべてのビューでタッチ イベントを無効にする最善の方法は何ですか?
90470 次
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 に答える