功能需求描述:页面中点击一个按钮,底部弹出带有EditText的布局,点击EditText弹出自定义键盘,此布局与自定义键盘同步上移。键盘显示时,外部区域可操作。
一、技术选型
1.不使用popupwindow,直接在布局中使用visible和gone显示隐藏自定义键盘
问题:自定义键盘本身也属于布局的一部分,visible后自定义键盘外区域不能操作,不符合项目的图表操作需求
2.第1个popupwindow弹出EditText布局,点击EditText弹出第2个带有自定义键盘的popupwindow
问题:popupwindow没有update移动动画,难以做到2个popupwindow同步移动
3.只有一个popupwindow,自定义键盘先是gone,点击EditText再让自定义键盘visible,加上gone动画效果
二、PopupWindow和自定义键盘遇到的问题
1.popupWindow.showAtLocation(rootview, Gravity.TOP, 0, 1850);
第一个参数需要是popupwindow所依附的父视图中的任意控件,在做第2种情况调研时,传入的是第1个popupwindow中的EditText,报WindowManager$BadTokenException,原因是popupwindow是动态创建的,不能作为showAtLocation()方法的显示位置
2.keyboardWindow.setBackgroundDrawable(new ColorDrawable());
如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框
原因:
public void showAtLocatio