Java android应用程序中的可拖动浮动窗口:不关注布局元素

Java android应用程序中的可拖动浮动窗口:不关注布局元素,java,android,android-layout,Java,Android,Android Layout,在我的应用程序中,我制作了一个浮动式窗口,显示在任何应用程序或主屏幕的顶部。就像一个facebook聊天泡泡。我已经制作了浮动窗口,其中包含一些用于不同操作的按钮。我在窗口中有一个编辑文本布局。我在聚焦浮动窗口时遇到了一些问题。每个版面都没有焦点,编辑文本也不起作用 我附上了一个相同的截图视频 我的代码是:- 服务中的oncreate(){} mFloatingWidget=LayoutInflater.from(this).充气(R.layout.layout\u floating\u wid

在我的应用程序中,我制作了一个浮动式窗口,显示在任何应用程序或主屏幕的顶部。就像一个facebook聊天泡泡。我已经制作了浮动窗口,其中包含一些用于不同操作的按钮。我在窗口中有一个编辑文本布局。我在聚焦浮动窗口时遇到了一些问题。每个版面都没有焦点,编辑文本也不起作用

我附上了一个相同的截图视频

我的代码是:-

服务中的oncreate(){}

mFloatingWidget=LayoutInflater.from(this).充气(R.layout.layout\u floating\u widget,null);
内部布局类型;
如果(Build.VERSION.SDK_INT<26){
layoutType=WindowManager.LayoutParams.TYPE\u电话;
}否则{
layoutType=WindowManager.LayoutParams.TYPE\u应用程序\u覆盖;
}
final WindowManager.LayoutParams params=新建WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_内容,
WindowManager.LayoutParams.WRAP_内容,
layoutType,
WindowManager.LayoutParams.FLAG\u不可聚焦,
像素格式(半透明);
params.gravity=gravity.TOP | gravity.START;
参数x=0;//窗口初始位置
参数y=100;//窗口初始位置
mWindowManager=(窗口管理器)getSystemService(窗口服务);
mWindowManager.addView(mFloatingWidget,params);
mFloatingWidget.findviewbyd(R.id.root_容器).setOnTouchListener(新视图.OnTouchListener(){
私有int initialX;
私有int初始值;
私有浮点数;
私家侦探敏感;
@凌驾
公共布尔onTouch(视图v,运动事件){
日志d(“广告”,“行动E”+事件);
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
日志d(“AD”,“动作停止”);
initialX=参数x;
初始值y=参数y;
initialTouchX=event.getRawX();
initialTouchY=event.getRawY();
返回true;
case MotionEvent.ACTION\u UP:
日志d(“广告”,“行动起来”);
int Xdiff=(int)(event.getRawX()-initialTouchX);
int-Ydiff=(int)(event.getRawY()-initialTouchY);
if(Xdiff<10&&Ydiff<10){
如果(isViewCollapsed()){
collapsedView.setVisibility(View.GONE);
expandedView.setVisibility(View.VISIBLE);
}
}
返回true;
case MotionEvent.ACTION\u移动:
日志d(“广告”,“行动动议”);
params.x=initialX+(int)(event.getRawX()-initialTouchX);
params.y=initialY+(int)(event.getRawY()-initialTouchY);
mWindowManager.updateViewLayout(mFloatingWidget,params);
返回true;
}
返回false;
}
});
}

请告诉我代码有什么问题


谢谢,这是因为焦点没有设置在窗口管理器上,而是在主屏幕窗口上。为了防止这种情况,不要在参数中添加标志“不可聚焦”

更新代码:-

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            layoutType,
            0,   // REMOVE FLAG_NOT_FOCUSABLE
            PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;   // Initial Position of window
params.y = 100; // Initial Position of window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingWidget, params);
希望这能回答你的疑问


谢谢

您是否在每个状态下都将onTouch的返回类型更改为false并查看结果?@MasoudDarzi是的,我也尝试过,但它不起作用。
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            layoutType,
            0,   // REMOVE FLAG_NOT_FOCUSABLE
            PixelFormat.TRANSLUCENT);

params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;   // Initial Position of window
params.y = 100; // Initial Position of window
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingWidget, params);