当前位置: 移动技术网 > IT编程>移动开发>Android > Android 中自定义Dialog样式的Activity点击空白处隐藏软键盘功能(dialog不消失)

Android 中自定义Dialog样式的Activity点击空白处隐藏软键盘功能(dialog不消失)

2019年07月24日  | 移动技术网IT编程  | 我要评论

马晓军,石玺玉,傲剑天下女主

一、需求触发场景:

项目中需要开发带有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不消失),希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网