如何在 android 视图上禁用所有用户输入(点击、触摸)
Posted
技术标签:
【中文标题】如何在 android 视图上禁用所有用户输入(点击、触摸)【英文标题】:How to disable all user inputs (click, touch) on an android view 【发布时间】:2014-10-27 11:05:26 【问题描述】:我有一个游戏视图,它是 View 类的扩展。在这个视图中,我使用画布绘图对象,用户可以与之交互。
这个视图加载到一个活动的布局中。当在布局中单击按钮时,我想禁用所有用户对游戏视图的输入。
我尝试过使用
gameView.setEnabled(false);
gameView.setClickable(false);
但用户仍然可以与画布对象进行交互。
仅供参考:Gameview 类也实现了以下接口。
public class Gameview extends View implements OnGestureListener,
OnDoubleTapListener, OnScaleGestureListener, AnimationListener
【问题讨论】:
【参考方案1】:你可以这样做:
gameView.setOnTouchListener(new View.OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
return true;
);
它会捕获所有用户输入,如果你返回true,它会停在这里。如果您返回 false,它将假定您尚未处理该事件并将其传递给下一个侦听器。当您需要启用/禁用视图时,您可以将布尔变量设置为 true / false。
【讨论】:
这会比接受的答案更好,如果我们没有其他理由扩展view
并拦截触摸事件那里 .【参考方案2】:
在你的 GameView 中像这样实现 onTouchEvent()。
public class GameView extends View
public boolean isTouchable()
return isTouchable;
public void setTouchable(boolean isTouchable)
this.isTouchable = isTouchable;
private boolean isTouchable= true;
public GameView(Context context, AttributeSet attrs)
super(context, attrs);
public GameView(Context context)
super(context);
//// ... Your Code
@Override
public boolean onTouchEvent(MotionEvent event)
if(isTouchable)
return super.onTouchEvent(event); // Enable touch event
return false; // Block touch event
如何使用?
gameView.setTouchable(false); // to disable touch
gameView.setTouchable(true); // to enable touch
【讨论】:
isTouchable 应替换为 !isTouchable Welcome to android ))) 在 ios 中这只是一行很短的代码 好!如果我们有充分的理由扩展view
。就我而言,它恰好是我的扩展view
哈哈。【参考方案3】:
科特林:
val yourView: View = findViewById(R.id.yourViewId)
// disable user interaction
yourView.setOnTouchListener _, _ -> false
// enable user interaction
yourView.setOnTouchListener v, event -> v.onTouchEvent(event)
【讨论】:
以上是关于如何在 android 视图上禁用所有用户输入(点击、触摸)的主要内容,如果未能解决你的问题,请参考以下文章