Android WindowManager错误:未调用DispatchAttachedToWindow

B M*_*B M 5 android native dispatch intentservice android-windowmanager

我的应用程序界面作为Facebook聊天,所以我使用覆盖按钮.我在主要活动中使用了意向服务.我在FloatBitchService中创建了chathead ui.使用WindowManager创建UI.将float_view布局添加到WindowManager.在float_view布局中,除了butHead之外,所有控件都可见.但头部是叠加按钮.我想显示ovelay按钮单击显示其他控件.我使用onTouchevent上的覆盖按钮进行叠加按钮单击.我的错误发生在输入文本框控件中.调试设备是三星Galaxy Note 2.

更新
在Samsung Note 2 Android 4.3中,在输入文本框发短信后按Enter键显示谷歌搜索应用程序.我的应用与谷歌搜索应用程序有什么问题.

(FloatBitchService.java)

public class FloatBitchService extends Service {
@Override
public void onCreate() {
    windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
    LayoutInflater inflater = LayoutInflater.from(this);        
    viewFloat = inflater.inflate(R.layout.float_view, null);
    butHead = (Button)viewFloat.findViewById(R.id.butHead);
    ...........................
    parameters = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT, // Width
            WindowManager.LayoutParams.WRAP_CONTENT, // Height
            WindowManager.LayoutParams.TYPE_PHONE, // Type
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,// Flag             
            PixelFormat.TRANSLUCENT // Format)
            );      
    parameters.x = 0;
    parameters.y = 0;
    parameters.gravity = Gravity.TOP | Gravity.LEFT;        
    windowManager.addView(viewFloat, parameters);
    butHead.setOnTouchListener(new OnTouchListener() {

        int initialX, initialY;
        float initialTouchX, initialTouchY;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:

                // Get current time in nano seconds.
                initialX = parameters.x;
                initialY = parameters.y;
                initialTouchX = event.getRawX();
                initialTouchY = event.getRawY();
                startClickTime = Calendar.getInstance().getTimeInMillis();
                Toast.makeText(getApplication(), "Here to Remove", Toast.LENGTH_SHORT).show();
                break;
            case MotionEvent.ACTION_UP:
                // Check Single Click
                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                if (clickDuration < MAX_CLICK_DURATION){
                    if (layout1.getVisibility() == View.VISIBLE) {  
                        // isMove flag for chat head movement
                        isMove = true;
                        chatHeadClose();
                    }else {
                        // isMove flag for chat head movement
                        isMove = false;
                        chatHeadOpen();
                    }
                }

                Display display = windowManager.getDefaultDisplay();
                Point point = new Point();
                display.getSize(point);
                screenWidth = point.x;
                screenHeight = point.y;

                // Dictionary Panel size set to fix screen size
                LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)layout1.getLayoutParams();
                params.width = screenWidth;
                params.height = (int)(screenHeight * 0.68);

                // Calculate for Delete Space [ * ]
                int screenWidthHalf = screenWidth / 2;
                int rightValue = screenWidthHalf + 100;
                int leftValue = screenWidthHalf - 100;
                int headwidth = butHead.getWidth() / 2;

                // float item close when arrive screen bottom                   
                if (parameters.y > (screenHeight - 450) && (parameters.x + headwidth) > leftValue && (parameters.x + headwidth) < rightValue) {
                    viewFloat.setVisibility(View.GONE);
                    Toast.makeText(getApplication(), "Removed!",Toast.LENGTH_SHORT).show();
                    stopSelf();
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (isMove) {
                    // chathead movement
                    parameters.x = initialX + (int) (event.getRawX() - initialTouchX);
                    parameters.y = initialY + (int) (event.getRawY() - initialTouchY);                      
                    windowManager.updateViewLayout(viewFloat, parameters);
                }
                break;

            }

            return false;
        }
    });
}
private void chatHeadOpen()
{
    parameters = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT, // Width
            WindowManager.LayoutParams.WRAP_CONTENT, // Height
            WindowManager.LayoutParams.TYPE_PHONE, // Type
            WindowManager.LayoutParams.FLAG_BLUR_BEHIND,// Flag             
            PixelFormat.TRANSLUCENT // Format)
            );

    parameters.x = 0;
    parameters.y = 0;
    parameters.gravity = Gravity.TOP | Gravity.LEFT;
    windowManager.removeView(viewFloat);
    windowManager.addView(viewFloat, parameters);                           
    layout1.setVisibility(View.VISIBLE);
}

private void chatHeadClose(){
    parameters = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT, // Width
            WindowManager.LayoutParams.WRAP_CONTENT, // Height
            WindowManager.LayoutParams.TYPE_PHONE, // Type
            WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,// Flag             
            PixelFormat.TRANSLUCENT // Format)
            );

    parameters.x = 0;
    parameters.y = 0;
    parameters.gravity = Gravity.TOP | Gravity.LEFT;
    windowManager.removeView(viewFloat);
    windowManager.addView(viewFloat, parameters);
    layout1.setVisibility(View.GONE);
}}
Run Code Online (Sandbox Code Playgroud)

错误屏幕截图