聊天头会弹出编辑文本。但是在里面点击时键盘不会出现
Chat head kind of pop up with edit text. But key pad not coming up when clicked inside
我已经使用服务为我的应用程序实现了聊天头类型的弹出。我在其中使用了编辑文本。
但问题是,当我单击编辑文本时,只有光标可见,而键盘没有出现。甚至无法 select 或复制粘贴该编辑文本中的文本。有什么帮助吗?谢谢
我找到了解决问题的方法。
我之前使用了以下代码:-
全局变量:-
private WindowManager mWindowManager;
WindowManager.LayoutParams params;
然后在Service的onCreate
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
//Add the view to the window.
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
问题出在 FLAG_NOT_FOCUSABLE,请改用 FLAG_NOT_TOUCH_MODAL。
但现在问题又来了,虽然我可以使用 floatingView 获取键盘,但其他应用程序无法使用键盘,甚至后退按钮也停止工作。
因此,为了解决这个问题,我使用了浮动按钮 UI,它在启用浮动键盘 UI 和禁用浮动键盘之间切换,以便后退按钮和键盘适用于其他应用程序。
我使用了以下代码:-
private void enableKeyPadInput(Boolean enable) {
mWindowManager.removeViewImmediate(mFloatingView);
if (enable) {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
} else {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
mWindowManager.addView(mFloatingView, params);
}
如果将 true 传递给此方法,则键盘开始工作。如果传递 false 则其他应用程序开始工作。
这是我解决问题的方法。还有比这更好的方法吗?
感谢@Narendra Jadon
这可能更好
private void enableKeyPadInput(Boolean enable) {
//mWindowManager.removeView(mFloatingView);
if (enable) {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
} else {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
mWindowManager.updateViewLayout(mFloatingView,params);
//mWindowManager.addView(mFloatingView, params);
}
我已经使用服务为我的应用程序实现了聊天头类型的弹出。我在其中使用了编辑文本。
但问题是,当我单击编辑文本时,只有光标可见,而键盘没有出现。甚至无法 select 或复制粘贴该编辑文本中的文本。有什么帮助吗?谢谢
我找到了解决问题的方法。
我之前使用了以下代码:-
全局变量:-
private WindowManager mWindowManager;
WindowManager.LayoutParams params;
然后在Service的onCreate
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
//Add the view to the window.
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
问题出在 FLAG_NOT_FOCUSABLE,请改用 FLAG_NOT_TOUCH_MODAL。
但现在问题又来了,虽然我可以使用 floatingView 获取键盘,但其他应用程序无法使用键盘,甚至后退按钮也停止工作。
因此,为了解决这个问题,我使用了浮动按钮 UI,它在启用浮动键盘 UI 和禁用浮动键盘之间切换,以便后退按钮和键盘适用于其他应用程序。
我使用了以下代码:-
private void enableKeyPadInput(Boolean enable) {
mWindowManager.removeViewImmediate(mFloatingView);
if (enable) {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
} else {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
mWindowManager.addView(mFloatingView, params);
}
如果将 true 传递给此方法,则键盘开始工作。如果传递 false 则其他应用程序开始工作。
这是我解决问题的方法。还有比这更好的方法吗?
感谢@Narendra Jadon
这可能更好
private void enableKeyPadInput(Boolean enable) {
//mWindowManager.removeView(mFloatingView);
if (enable) {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
} else {
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
}
mWindowManager.updateViewLayout(mFloatingView,params);
//mWindowManager.addView(mFloatingView, params);
}