如何在 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 视图上禁用所有用户输入(点击、触摸)的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何禁用 ListView?

如何在一个页面上禁用 Android 后退按钮并在所有其他页面上更改为退出按钮

如何在 Android 的 web 视图中禁用文本选择?

禁用文本框丢失视图状态

禁用 Android 中所有应用的分屏模式

如何禁用Android按钮?