Android 中自定义Dialog样式的Activity点击空白处隐藏软键盘功能(dialog不消失)
程序员文章站
2024-01-20 22:39:58
一、需求触发场景:
项目中需要开发带有edittext的dialog显示,要求在编辑完edittext时,点击dilog的空白处隐藏软键盘。但是dialog不会消失。示例...
一、需求触发场景:
项目中需要开发带有edittext的dialog显示,要求在编辑完edittext时,点击dilog的空白处隐藏软键盘。但是dialog不会消失。示例如下:
二、实现方法:
发布需求时,我个人曾想过直接通过new的方式直接创建dialog,经过多次尝试,无法实现要求,所以采用将activity设置为dialog样式进行展示,调用方法实现需求。具体实现如下:
本次演示示例的工程结构:
2.1androidmainfest.xml配置文件
需要在配置文件中将需要显示为dialog样式的activity添加dialog主题(可调用系统自带也可以自定义主题添加)
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.panhouye.dialoginput"> <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/apptheme"> <activity android:name=".mainactivity"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".main2activity" android:theme="@style/base.v7.theme.appcompat.light.dialog"></activity> </application> </manifest>
2.2java实现代码
(1)baseactivity作为本次demo中activity的基类,代码实现如下:
package com.panhouye.dialoginput; import android.content.context; import android.support.v7.app.appcompatactivity; import android.view.motionevent; import android.view.inputmethod.inputmethodmanager; /** * created by pamhouye on 2017/4/25 0025. */ public class baseactivity extends appcompatactivity { @override public boolean ontouchevent(motionevent event) { // todo auto-generated method stub if(event.getaction() == motionevent.action_down){ if(getcurrentfocus()!=null && getcurrentfocus().getwindowtoken()!=null){ inputmethodmanager manager = (inputmethodmanager) getsystemservice(context.input_method_service); manager.hidesoftinputfromwindow(getcurrentfocus().getwindowtoken(), inputmethodmanager.hide_not_always); } } return super.ontouchevent(event); } }
(2)mainactivity实现代码如下:
package com.panhouye.dialoginput; import android.content.intent; import android.os.bundle; import android.view.view; public class mainactivity extends baseactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } //dialog按钮触发事件方法 public void dialog(view view){ intent intent = new intent(this,main2activity.class); startactivity(intent); } }
(3)main2activity作为dialog样式的activity实现代码如下:
package com.panhouye.dialoginput; import android.os.bundle; import android.view.gravity; import android.view.window; import android.view.windowmanager; public class main2activity extends baseactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main2); //设置窗口对齐屏幕宽度 window win = this.getwindow(); win.getdecorview().setpadding(0, 0, 0, 0); windowmanager.layoutparams lp = win.getattributes(); lp.width = windowmanager.layoutparams.match_parent; lp.height = windowmanager.layoutparams.wrap_content; lp.gravity = gravity.center;//设置对话框置顶显示 win.setattributes(lp); //设置点击外部空白处可以关闭activity this.setfinishontouchoutside(true); } }
以上所述是小编给大家介绍的android 中自定义dialog样式的activity点击空白处隐藏软键盘功能(dialog不消失),希望对大家有所帮助