android-禁用所有视图的触摸事件

禁用所有视图的触摸事件的最佳方法是什么?

非常感谢,

格拉齐

Gratzi asked 2020-07-27T19:09:52Z

13个解决方案

55 votes

这是用于禁用某个视图组的所有子视图的功能:

/**

* Enables/Disables all child views in a view group.

*

* @param viewGroup the view group

* @param enabled true to enable, false 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);

}

}

}

peceps answered 2020-07-27T19:10:20Z

16 votes

覆盖活动的false方法,如下所示:

@Override

public boolean dispatchTouchEvent(MotionEvent ev){

return true;//consume

}

如果返回false,则所有触摸事件均被禁用。

返回false以使其正常工作

Ercan answered 2020-07-27T19:10:48Z

15 votes

您可以尝试:

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);

}

OWADVL answered 2020-07-27T19:11:21Z

11 votes

如果且仅当inProgress变量设置为false时,这段代码基本上会将此事件传播到父视图,从而允许触摸事件。

private boolean inProgress = false;

@Override

public boolean dispatchTouchEvent(MotionEvent ev) {

if (!inProgress)

return super.dispatchTouchEvent(ev);

return true;

}

Bruno Horta answered 2020-07-27T19:11:41Z

5 votes

用这个。 返回true表示侦听器已经消耗了该事件,而android不需要执行任何操作。

view.setOnTouchListener(new View.OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

return true;

}

});

Abhishek answered 2020-07-27T19:12:01Z

3 votes

如何在所有视图上覆盖透明视图并捕获所有触摸事件呢?

Yudi answered 2020-07-27T19:12:21Z

3 votes

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,

WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

Shaleen M answered 2020-07-27T19:12:37Z

2 votes

整个应用程序可能无法实现。 您将必须为每个视图覆盖onTouchEvent()并忽略用户输入。

rajath answered 2020-07-27T19:12:57Z

1 votes

我做了这种方法,对我来说非常合适。 它禁用选定视图的所有触摸事件。

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);

}

}

}

jan hruska answered 2020-07-27T19:13:17Z

0 votes

根据您的评论:

我只想能够在某个时候禁用当前活动的视图

您似乎想禁用当前活动的所有触摸,而不管触摸的视图如何。

在适当的时间从覆盖Activity.dispatchTouchEvent(MotionEvent)返回true将消耗触摸并有效地完成此操作。 此方法是touch方法调用链中的第一个。

SK9 answered 2020-07-27T19:13:50Z

0 votes

一种更简单的方法是通过布局(.xml)文件禁用它:只需添加

android:shouldDisableView="True"

对于要禁用的视图的触摸事件。

BhanuSingh answered 2020-07-27T19:14:14Z

0 votes

在科特林:

fun View.setEnabledRecursively(enabled: Boolean) {

isEnabled = enabled

if (this is ViewGroup)

(0 until childCount).map(::getChildAt).forEach { it.setEnabledRecursively(enabled) }

}

// usage

import setEnabledRecursively

myView.setEnabledRecursively(false)

yanchenko answered 2020-07-27T19:14:34Z

0 votes

最简单的方法是

private fun enableDisableActivty(isEnable : Boolean){

if(!isEnable) window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

else window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

}

Shivam Dawar answered 2020-07-27T19:14:58Z

android点击事件禁用,android-禁用所有视图的触摸事件相关推荐

  1. android 点击图标重启,Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法...

    Android应用第一次安装成功点击"打开"后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法 if((getIntent().getFlags() & I ...

  2. Android点击无响应,Android Studio无响应打不开的解决办法

    最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...

  3. android 点击文本框,android 文本框部分文字的点击事件

    转载请标明出处. android文本框部分文字点击事件. String text1 = "这是个例子"; String text2 = "点击的文字"; Spa ...

  4. android 点击跳过,android开发里跳过的坑——button不响应点击事件

    昨天遇到一个头疼的问题,在手机上按钮事件都很正常,但是在平板上(横屏显示的状态),button点击事件不响应,代码简化如下: public class Test extends Activity im ...

  5. android 点击空白退出,Android 点击空白处隐藏键盘

    方法一:使用android的分发机制(代码稍微有点多) /** * 实现点击空白处,软键盘消失事件 * @param ev * @return */ @Override public boolean  ...

  6. android点击出现菜单,Android 点击按钮弹出菜单

    效果图: 1.创建menu文件夹,新建main.xml文件 android:id="@+id/add" android:title="添加" /> and ...

  7. android点击选择相册,android: 从相册中选择照片

    虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的. 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用.一个优秀 ...

  8. android 点击返回顶部,Android scrollToTop实现点击回到顶部(兼容PullTorefreshScrollview)...

    前言 最近因为项目组需求,特研究了一下"回到顶部"效果,即:页面里有scrollview,内容很多,当滑动到页面下面或者更深时,需要回到顶部,即可点击出现的按钮,省得回滑N久.我没 ...

  9. android点击展开全文,Android显示全文折叠控件使用方法详解

    一般列表里文字太多的一个折叠效果的空间,效果图如下. 当文字超过设定的行数后就折叠,小于设定行数不显示展开按钮.下面上代码. 先看布局文件: android:layout_width="wr ...

最新文章

  1. 10个迷惑新手的Cocoa,Objective-C开发难点和问题
  2. linux gcc 与 glibc 的关系 glibc版本查看
  3. 别顾着学习工作,没了生活
  4. XCode上传成功后,商店里构建版本显示正在处理中
  5. TensorFlow学习笔记(十八)tf.reshape矩阵变形
  6. python声音信号调制_用python产生正弦波和PWM信号产生脉冲幅度调制
  7. 备份数据 宝塔linux_宝塔面板旧版本升级教程汇总—升级宝塔面板
  8. P2055-假期的宿舍【网络流,最大流,最大匹配】
  9. source 1.5 中不支持 diamond 运算符
  10. 经典算法题每日演练——第十八题 外排序
  11. 分享:架构师软技能之协商
  12. 解决python安装包无法正常安装问题
  13. 微信小程序从入门到放弃(五)
  14. PhpQuery PHP操作HTML类,PHP操作XML类,PHP操作Dom类
  15. linux 传真 邮件,基于Linux的传真系统(转)
  16. java 合并两个音频_如何利用音乐合成软件将多段音频合并为一段?快速合并音频的方法...
  17. UE TurnInPlace 转身动画的解决方案和常见问题
  18. HDU 5713 状压dp
  19. 解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。
  20. python头像转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

热门文章

  1. Java加视频特效,实现伪原创
  2. 获取JTextPane光标的位置
  3. PLSQL登录时,“ORA-12514:监听程序当前无法识别连接描述符中请求的服务” 错误解决
  4. 威纶通触摸屏与仪表通讯_西门子S7-200PLC与威纶通HMI的通信案例
  5. css设置input框长度_干货极致分享浅谈CSS属性,有趣的盒模型。网友:哎呦不错哦!...
  6. UOS系统下FFmpeg源码编译安装及注意事项
  7. Android判断网线连接
  8. 为什么IEE754标准中,32位浮点数的指数转换为阶码时需要加上数值为127的偏移量?
  9. 防摇控制matlab,一种起重机防摇控制方法与流程
  10. cfree运行程序错误的原因_ARM Cortex-M 系列 MCU错误代码自动追踪库的使用分享