View setEnabled(false) 影响力

探讨了在特定场景下,视图设置为不可用时如何影响按键事件和触摸事件的处理过程,揭示了在视图被禁用时,如何通过判断视图标志位来屏蔽这些事件,并解释了其背后的原理。

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

@RemotableViewMethod
	public void setEnabled(boolean enabled) {
		if (enabled == isEnabled()) return;

		setFlags(enabled ? ENABLED : DISABLED, ENABLED_MASK);

		/*
		 * The View most likely has to change its appearance, so refresh
		 * the drawable state.
		 */
		refreshDrawableState();

		// Invalidate too, since the default behavior for views is to be
		// be drawn at 50% alpha rather than to change the drawable.
		invalidate(true);

		if (!enabled) {
			cancelPendingInputEvents();
		}
	}

可以看到setEnable(false) 将View的flag打上了DISABLED.

public boolean onKeyDown(int keyCode, KeyEvent event) {
..............................................................

		if (KeyEvent.isConfirmKey(keyCode)) {
			if ((mViewFlags & ENABLED_MASK) == DISABLED) {
				return true;
			}
...................................................................
	}

	public boolean onKeyUp(int keyCode, KeyEvent event) {
		if (KeyEvent.isConfirmKey(keyCode)) {
			if ((mViewFlags & ENABLED_MASK) == DISABLED) {
				return true;
			}
...................................................................
	}

	private boolean isHoverable() {
.................................................................
		if ((viewFlags & ENABLED_MASK) == DISABLED) {
			return false;
		}
....................................................................
	}

public boolean onTouchEvent(MotionEvent event) {
		final int viewFlags = mViewFlags;

		if ((viewFlags & ENABLED_MASK) == DISABLED) {
			if (event.getAction() == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) {
				setPressed(false);
			}
............................................................
}

可以看到,Enable false 把key event和 touch event都屏蔽掉了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值