欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-01-20 22:39:58
一、需求触发场景: 项目中需要开发带有edittext的dialog显示,要求在编辑完edittext时,点击dilog的空白处隐藏软键盘。但是dialog不会消失。示例...

一、需求触发场景:

项目中需要开发带有edittext的dialog显示,要求在编辑完edittext时,点击dilog的空白处隐藏软键盘。但是dialog不会消失。示例如下:

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

二、实现方法:

发布需求时,我个人曾想过直接通过new的方式直接创建dialog,经过多次尝试,无法实现要求,所以采用将activity设置为dialog样式进行展示,调用方法实现需求。具体实现如下:

本次演示示例的工程结构:

Android 中自定义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不消失),希望对大家有所帮助