Android 给view 设置setSystemUiVisibility 之后,每次点击事件监听不到

我给 view 设置setSystemUiVisibility 事件之后,屏幕没有获取焦点时,点击其屏幕,他的点击事件都不响应。

解决方法,setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// 在此处显示你需要获取焦点的view
//这样就OK啦
mController.show();
}

### 解决方案 在 Android 中,当导航栏显示或隐藏时会影响窗口的位置和大小。这是因为系统的默认行为会调整应用界面以适应可用屏幕空间的变化。要使窗口位置不受导航栏显示/隐藏的影响,可以通过以下方法实现: #### 方法一:使用 `WindowManager.LayoutParams` 设置固定坐标 通过设置 `WindowManager.LayoutParams` 的属性可以指定窗口的绝对位置,并忽略导航栏的状态变化。 ```java // 获取 WindowManager 和 LayoutParams 对象 WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 需要在 API 26+ 使用此类型 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); // 设置固定的 X 和 Y 坐标 layoutParams.x = desiredXPosition; layoutParams.y = desiredYPosition; // 添加视图到窗口管理器 windowManager.addView(view, layoutParams); ``` 上述代码中的 `desiredXPosition` 和 `desiredYPosition` 是您希望窗口显示的具体位置[^1]。 #### 方法二:禁用系统 UI 调整功能 如果您的目标是在 Activity 或 Fragment 中防止布局因导航栏状态改变而重新计算,则可以在 `Activity` 的主题中添加以下配置项来禁用自动调整: ```xml <item name="android:windowFullscreen">true</item> ``` 或者,在运行时调用以下方法强制让应用程序不响应导航栏的变化: ```java View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); ``` 这将使得即使导航栏被隐藏或显示,也不会影响布局的实际尺寸。 #### 方法三:监听并手动补偿导航栏高度 如果您需要动态处理导航栏的高度变化,可以获取导航栏的高度并通过编程方式调整窗口位置: ```java int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { int navBarHeight = getResources().getDimensionPixelSize(resourceId); // 手动调整窗口位置以考虑导航栏的存在 layoutParams.y += isNavigationBarVisible ? navBarHeight : 0; } ``` 这里的关键在于检测导航栏是否可见以及其具体高度,并据此更新窗口参数。 --- ### 注意事项 - 如果设备启用了手势模式而非传统三键导航条,则可能不存在物理意义上的“导航栏”,因此需额外判断当前设备的行为特性。 - 上述解决方案适用于浮窗类场景;对于常规活动页面,请优先尝试修改 XML 文件内的属性定义完成需求适配工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值