我使用WindowManager创建一个视图并将视图添加到屏幕,但我无法使视图具有焦点。我认为我将WindowManager.LayoutParams设置为正确。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
pushView = LayoutInflater.from(getApplicationContext()).inflate(
R.layout.push, null);
btn = (Button) findViewById(R.id.btn);
cancelBtn = (Button) pushView.findViewById(R.id.cancelBtn);
windowManager = getWindowManager();
handler = new MyHandler();
pushView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
System.out.println("onclick");
windowManager.removeView(pushView);
}
});
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_FULLSCREEN,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.y = 0;
params.x = 0;
windowManager.addView(pushView, params);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
Message msg = handler.obtainMessage();
handler.sendEmptyMessage(0x123);
}
}, 5000);
}
});
}
我想让pushView专注于处理观看事件。这个问题困扰了我很长一段时间。谁能帮助我...
答案 0 :(得分:1)
您只需删除FLAG_NOT_FOCUSABLE
标记:
params.flags = params.flags & ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
答案 1 :(得分:0)
我已经找到了问题。因为我使用了TYPE_SYSTEM_OVERLAY
。
窗口类型:系统覆盖窗口,需要显示在其他所有窗口之上。这些窗口不得占用输入焦点,否则会干扰键盘锁。在多用户系统中,仅在拥有用户的窗口中显示。
所以我无法获得输入焦点。
答案 2 :(得分:0)
这可能已经晚了4年但您尝试使用WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
代替TYPE_SYSTEM_OVERLAY
。
前者似乎没有焦点剥夺限制