DispatchTouchEvent
DispatchTouchEvent
【问题驱动学习】
解决方案一
使用了WindowManager 在原始的activity_main布局中加载了一个mylayout布局
问题点:原有的布局中的按钮无法点击,一直被WindowManager的addView进来的布局所覆盖着,这里就需要加入事件分发处理
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.test1).setOnClickListener(this);
findViewById(R.id.tt).setOnClickListener(this);
mView = LayoutInflater.from(this).inflate(R.layout.mylayout, null);
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// 可以对params进行一些设置
params.gravity = Gravity.CENTER;
//表示系统会将当前Window区域以外的单击事件传递给底层的Window,而区域以内的单击事件则自己处理。一般都需要开启此标记,否则其他Window将无法收到单击事件。
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.width = 120;
params.height = 72;
mWindowManager.addView(mView, params);
}
解决方案二
除了分发处理的方案,还有一个便捷的解决处理方法LayoutParams.FLAG_NOT_TOUCH_MODAL 可以让区域外的点击事件直接传递给底层的window
public class MainActivity extends AppCompatActivity implements OnClickListener {
private WindowManager mWindowManager;
private View mView;
private Button tt;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = LayoutInflater.from(this).inflate(R.layout.mylayout, null);
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
// 可以对params进行一些设置
params.gravity = Gravity.CENTER;
//表示系统会将当前Window区域以外的单击事件传递给底层的Window,而区域以内的单击事件则自己处理。一般都需要开启此标记,否则其他Window将无法收到单击事件。
params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.width = 1200;
params.height = 720;
mWindowManager.addView(mView, params);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tt:
Toast.makeText(this, "ppppp", Toast.LENGTH_SHORT).show();
mWindowManager.removeViewImmediate(mView);
break;
}
}
private void init() {
tt = findViewById(R.id.tt);
tt.setOnClickListener(this);
}
}
本文来自博客园,作者:阿寳同學Zybao,转载请注明原文链接:https://www.cnblogs.com/zybao/p/16965929.html

浙公网安备 33010602011771号