NavigationBar 按钮在从服务绘制的布局上没有响应
NavigationBar buttons not responding on a layout drawn from Service
我正在尝试实现一种 AlertWindow
的东西,我正在使用 WindowsManager
的实例从 Service
添加一个 View
。 View
可见且可访问。但是屏幕 NavigationBar
上的 back/home 按钮似乎没有响应。我是 Android.
的新手
这是我的代码片段:
mLayout = new LinearLayout(this);
mLayout.setLayoutParams(new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT));
View view = LayoutInflater.from(this).inflate(R.layout.Mainactivity,
mLayout, true);
mTvErrorMsg = (TextView)view.findViewById(R.id.tv_error_msg);
mChkBoxAppState = (CheckBox)view.findViewById(R.id.chkbox_app_state);
mCancelBtn = (Button)view.findViewById(R.id.btn_action);
mEdtPin.addTextChangedListener(this);
try {
mWindowManager.addView(mLayout, wmlp);
} catch (RuntimeException e) {
SymLog.e(TAG, "Failed to add lock page.", e);
}
您确定您定义的布局参数正确吗?
new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT)
这意味着您拥有的 LinearLayout 将占用整个父级 width/height。也许将视图更改为 WRAP_CONTENT,这样它只会占用所需的空间。
这可能需要更多的工作,因为这取决于您尝试展示的内容。
添加以下 LayoutParameters
解决了我的问题:
wmlp.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
wmlp.flags &= ~(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
wmlp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
wmlp.format = -1;
wmlp.token = null;
wmlp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;
我正在尝试实现一种 AlertWindow
的东西,我正在使用 WindowsManager
的实例从 Service
添加一个 View
。 View
可见且可访问。但是屏幕 NavigationBar
上的 back/home 按钮似乎没有响应。我是 Android.
这是我的代码片段:
mLayout = new LinearLayout(this);
mLayout.setLayoutParams(new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT));
View view = LayoutInflater.from(this).inflate(R.layout.Mainactivity,
mLayout, true);
mTvErrorMsg = (TextView)view.findViewById(R.id.tv_error_msg);
mChkBoxAppState = (CheckBox)view.findViewById(R.id.chkbox_app_state);
mCancelBtn = (Button)view.findViewById(R.id.btn_action);
mEdtPin.addTextChangedListener(this);
try {
mWindowManager.addView(mLayout, wmlp);
} catch (RuntimeException e) {
SymLog.e(TAG, "Failed to add lock page.", e);
}
您确定您定义的布局参数正确吗?
new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT)
这意味着您拥有的 LinearLayout 将占用整个父级 width/height。也许将视图更改为 WRAP_CONTENT,这样它只会占用所需的空间。
这可能需要更多的工作,因为这取决于您尝试展示的内容。
添加以下 LayoutParameters
解决了我的问题:
wmlp.flags = WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
wmlp.flags &= ~(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
wmlp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT | WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
wmlp.format = -1;
wmlp.token = null;
wmlp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE;