Android中弹窗中带有Edittext,软键盘遮挡问题
关于dialog遇到的问题
我们都知道弹窗dialog所需要传入的上下文必须是Activity对象,其实现在也有全局的dialog,但是需要权限
但是经测试在小米6.0上,这个权限是默认关闭的,当然6.0以上,Android涉及到危险权限和普通权限,危险权限不仅仅要再清单文件中声明,在页面涉及到该权限的时候,会弹出系统提示框来提示用户,当然我们一般会自定义弹窗,因为仅仅依赖系统的权限弹窗提示是不行的,因为用户可能点击了拒绝并且不再提醒,这里运行时权限可以考虑使用鸿洋大神的 eastPermission 或者XPermission,在用户拒绝之后,弹出提示,进入到设置界面,用法非常简单,今天的主题不是这个就不再说了,今天的主题是用另外一种思路来实现弹窗
使用弹窗样式的Activity来代替dialog
跟刚才说的一样,dialog上有edittext,会导致软键盘挡住弹窗,网上很多解决办法都试过了,没用,后来想到最简单的方法就是用一个弹窗样式的Activity来代替dialog,
清单文件
DialogActivity
public class DialogAty extends Activity {@BindView(R.id.et_password)EditText mEtPassword;@BindView(R.id.btn_cancel)Button mBtnCancel;@BindView(R.id.btn_confirm)Button mBtnConfirm;@BindView(R.id.ll_btns)AutoRelativeLayout mLlBtns;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dialog_aty); //点击外部,消失 this.setFinishOnTouchOutside(false); // Make us non-modal, so that others can receive touch events. getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); // ...but notify us that it happened. getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); ButterKnife.bind(this);}@OnClick({R.id.btn_cancel, R.id.btn_confirm})public void onViewClicked(View view) { switch (view.getId()) { case R.id.btn_cancel: finish(); break; case R.id.btn_confirm: startActivity(new Intent(Utils.getContext(), AlarmSettingActivity.class)); // mEtPassword.getText().toString(); finish(); break; }}@Overridepublic boolean onTouchEvent(MotionEvent event) { // If we've received a touch notification that the user has touched // outside the app, finish the activity. if (MotionEvent.ACTION_OUTSIDE == event.getAction()) { //finish(); //点击外部,软键盘消失 KeyBoardUtils.hideInputForce(this); return true; } // Delegate everything else to Activity. return super.onTouchEvent(event);}
}
xml
<?xml version="1.0" encoding="utf-8"?>
效果图
遇到的小bug
问题
中间遇到一个小插曲,就是在vivo手机上,打开这个弹窗的Activity,直接透明看到了桌面,在其他手机上没有问题
解决
从网上找了很久资料都没找到,启动模式设置为singleInstance也没用
后来找到了问题所在,是因为我用了滑动返回,所以我要把所以Activity的样式都是设置为透明的,然后每个aty布局中写背景颜色,但是偏偏在vivo(其他手机有没有该问题不知道),只要涉及到透明和透明度,看到的不是下面一个Activity,而是直接透明看到桌面,反正我试了在小米6.0和华为7.0都没问题,在vivo5.1上有这个问题,导致我的弹窗Activity一打开,弹窗以外都变透明了
后来的解决办法:把弹窗类型的Activity的上一个页面,也就是任务栈的上一个Activity,背景设置为不透明的,就ok了
工作仓促,暂时记一下,以后完善
更多相关文章
- android 属性系统,SystemProperties 的简介---转载
- Android客户端请求服务端资源(HttpURLConnection和输入流实现)
- Android中显示GIF动画的实现代码
- Android下写一个永远不会被KILL掉的进程/服务
- 听说谷歌Baba更新了 Material UI ...
- Android中CMake的使用之三调用第三方库
- Android(安卓)Studio 中手把手教你设置switch/case代码块自动补
- flex兼容 iOS和Android样式兼容 【微信小程序】
- Android权限设置引导