Android中弹窗中带有Edittext,软键盘遮挡问题
来源:互联网 发布:java变量定义规则 编辑:程序博客网 时间:2024/05/14 02:46
关于dialog遇到的问题
我们都知道弹窗dialog所需要传入的上下文必须是Activity对象,其实现在也有全局的dialog,但是需要权限
<!-- //全局dialog --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
但是经测试在小米6.0上,这个权限是默认关闭的,当然6.0以上,Android涉及到危险权限和普通权限,危险权限不仅仅要再清单文件中声明,在页面涉及到该权限的时候,会弹出系统提示框来提示用户,当然我们一般会自定义弹窗,因为仅仅依赖系统的权限弹窗提示是不行的,因为用户可能点击了拒绝并且不再提醒,这里运行时权限可以考虑使用鸿洋大神的 eastPermission 或者XPermission,在用户拒绝之后,弹出提示,进入到设置界面,用法非常简单,今天的主题不是这个就不再说了,今天的主题是用另外一种思路来实现弹窗
使用弹窗样式的Activity来代替dialog
跟刚才说的一样,dialog上有edittext,会导致软键盘挡住弹窗,网上很多解决办法都试过了,没用,后来想到最简单的方法就是用一个弹窗样式的Activity来代替dialog,
<style name="dialogstyle" parent="Theme.AppCompat.Light.Dialog"> <!--设置dialog的背景--> <item name="android:windowBackground">@android:color/transparent</item> <!--设置Dialog的windowFrame框为无--> <item name="android:windowFrame">@null</item> <!--设置无标题--> <item name="android:windowNoTitle">true</item> <!--是否浮现在activity之上--> <item name="android:windowIsFloating">true</item> <!--是否半透明--> <item name="android:windowIsTranslucent">true</item> <!--设置窗口内容不覆盖--> <item name="android:windowContentOverlay">@null</item> <!--设置动画,在这里使用让它继承系统的Animation.Dialog--> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--背景是否模糊显示--> <item name="android:backgroundDimEnabled">true</item></style>
清单文件
<activity android:name=".activity.DialogAty" android:screenOrientation="portrait" android:theme="@style/dialogstyle"/>
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中弹窗中带有Edittext,软键盘遮挡问题
- android弹出软键盘时,editText被遮挡的问题
- 【Android】EditText 遇到软键盘遮挡底部一点的问题
- Android解决被软键盘遮挡的EditText问题
- Android EditText 防止软键盘遮挡
- Android软键盘遮挡问题
- 软键盘遮挡edittext处理
- 关于避免软键盘遮挡EditText显示的问题
- Andorid解决登陆时edittext软键盘遮挡问题
- Android EditText 自动弹出软键盘,遮挡输入框
- android 软键盘遮挡或隐藏 edittext的方法
- android软键盘遮挡输入框问题
- Android 软键盘遮挡问题 windowSoftInputMode
- android 解决软键盘遮挡popwindow问题
- Android开发软键盘遮挡问题汇总
- camera中,软键盘遮挡问题
- 软键盘遮挡问题
- 软键盘遮挡问题
- dl4mt:lstm语言模型训练,代码讲解
- Django+Jquery+Ajax+验证码登录案例系列之十二
- QT常用控件之QTimer,QDialog,QLabel,QLineEdit,QProgressBar,QComboBox,QPushButton,QGridLayout
- 20170630
- Deep Learning(深度学习)学习笔记整理系列之(一)
- Android中弹窗中带有Edittext,软键盘遮挡问题
- Apache负载均衡配置
- 【JAVA多线程】-线程的两种创建方式及比较
- 6.29
- java 内存回收管理机制——Reference中四种引用方式
- Tomcat中web.xml配置数据库和servlet的配置
- Optical.Research.Associates.LightTools.v5.1.incl.SP1光学工程软件
- Beebird的小e体验板学习历程2
- com.microsoft.sqlserver.jdbc.SQLServerException: 不支持此服务器版本。目标服务器必须是 SQL Server 2000 或更高版本。