EditText点击无反应解决办法

本文介绍了一个转手多次的Android项目中遇到的自定义文本框组件无法获得焦点的问题及解决过程。通过调整LinearLayout的descendantFocusability属性为beforeDescendants,解决了EditText无法获取焦点并弹出输入法的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接手一个转了三手的Android项目,在画一个页面的时候,发现复用的自定义文本框组件,不管怎么点击、长按,都无法获得焦点并弹出输入法进入到可编辑模式。给文本框组件加上点击事件,点击事件内的逻辑可以执行,但唯独不可编辑。网上常见的解决办法都没办法解决。

遂沿着页面层次往上找,打算一层一层,一个属性一个属性的排查。在包裹整个页面组件的LinearLayout中发现一个属性

android:descendantFocusability="blocksDescendants"

上网查了一下,这个属性是当一个view获取焦点时,定义viewGroup和其子控件两者之间的关系。属性的值有三种:

属性描述
beforeDescendantsviewgroup会优先其子类控件而获取到焦点
afterDescendantsviewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendantsviewgroup会覆盖子类控件而直接获得焦点

于是将外层LinearLayout中的这个属性的值改为beforeDescendants,果然好使了。应该是ViewGroup将EditText的编辑事件拦截,导致无法获取焦点并弹出输入法。

PRO IMAGETEST ; 创建主窗口 mainBase = WIDGET_BASE(xoffset=500, yoffset=100, TITLE='图像处理系统', COLUMN=1, XSIZE=1000, YSIZE=1000) ; 创建菜单栏 menuBar = WIDGET_BASE(mainBase, /ROW) ; 文件菜单 fileMenu = WIDGET_BUTTON(menuBar, VALUE='文件(&F)', /MENU) openItem = WIDGET_BUTTON(fileMenu, VALUE='打开图像(&O)', EVENT_PRO='OpenImage', uname='open') exitItem = WIDGET_BUTTON(fileMenu, VALUE='退出(&E)', EVENT_PRO='Exit', uname='exit', /SEPARATOR) ; 处理菜单 enhanceItem = WIDGET_BUTTON(menuBar, VALUE='图像增强',/menu) pinghua=widget_button(enhanceItem ,value='图像平滑',uname='pinghua') convol2=widget_button(enhanceItem ,value='灰度拉伸',uname='huidulashen') edgeItem = WIDGET_BUTTON(menuBar, VALUE='边缘检测',/menu) sobel=widget_button(edgeItem,value='sobel',uname='sobel') roberts=widget_button(edgeItem,value='roberts',uname='roberts') Prewitt=widget_button(edgeItem,value='Prewitt',uname='Prewitt') lvbo=widget_button(menuBar,value='滤波处理',/menu) meanpass=widget_button(lvbo,value='均值滤波',uname='meanpass') midpass=widget_button(lvbo,value='中值滤波',uname='midpass') gspass=widget_button(lvbo,value='高斯滤波',uname='gspass') opening=widget_button(lvbo,value='开运算',uname='opening') closing=widget_button(lvbo,value='闭运算',uname='closing') zhifangtu=widget_button(menuBar,value='直方图操作',/menu) histeqitm = WIDGET_BUTTON(zhifangtu, VALUE='直方图均衡化',uname='hist') thresholdItem = WIDGET_BUTTON(zhifangtu, VALUE='二值化',uname='hist2') ; 视图菜单 viewMenu = WIDGET_BUTTON(menuBar, VALUE='视图(&V)', /MENU) statsItem = WIDGET_BUTTON(viewMenu, VALUE='统计信息', EVENT_PRO='ShowStatsDialog') ; 创建工具栏 toolbar = WIDGET_BASE(mainBase, /ROW, /FRAME) openBtn = WIDGET_BUTTON(toolbar, VALUE='打开', EVENT_PRO='OpenImage') saveBtn = WIDGET_BUTTON(toolbar, VALUE='保存', EVENT_PRO='SaveImage') ; 主内容区(图像+信息) mybase = WIDGET_BASE(mainBase, /ROW) ; 图像信息面板 infobase = WIDGET_BASE(mybase, /COL, /FRAME, XSIZE=200) tab2 = WIDGET_BASE(infobase, TITLE='图像信息', SCR_YSIZE=200, SCR_XSIZE=200, /FRAME) label1 = WIDG代码错误很多,没办法正常显示,坐标信息也没有显示,给我修改一下,
07-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值