1. 程式人生 > >Andriod中自定義Dialog樣式的Activity點選空白處隱藏軟體盤(Dialog不消失)

Andriod中自定義Dialog樣式的Activity點選空白處隱藏軟體盤(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);
    }
}

就這樣一直膚淺下去嘍,洗洗睡啦

相關推薦

Andriod定義Dialog樣式Activity空白處隱藏軟體Dialog消失

一、需求觸發場景: 專案中需要出發帶有EditText的Dialog顯示,要求在編輯完EditText時,點選Dilog的空白處隱藏軟鍵盤。但是Dialog不會消失。示例如下: 二、實現方法: 釋出需求時,我個人曾想過直接通過new的方式直接建立Dialog,經過多次嘗試

8.0 Notification的使用1. 普通的notification 2. 帶進度條的notification 3. 定義的notification,事件進入軟體的一個activity

實現功能: 最終效果: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.

解決DialogFragment定義佈局的按鈕事件無效

在DialogFragment中如果有時會突然發現我們寫的自定義佈局的點選事件無效,如果寫在onCreateView()方法中,如果又重寫了onCreateDialog()方法,建議把控制元件的初始化和

Android-UI佈局---RecyclerView學習在介面卡定義長按和事件

該系列文章  如果想全方面學習,建議參考這個大牛的文章,寫的真可以。 地址:http://blog.csdn.net/lmj623565791/article/details/45059587 因為RecyclerView沒有點選、長按事件,需要自己寫 實現的方式比較多,

Vue 實現空白處隱藏某節點三種方式:指令、普通、遮罩

在專案中往往會有這樣的需求: 彈出框(或Popover)在 show 後,點選空白處可以將其 hide。 針對此需求,整理了三種實現方式,大家按實際情況選擇。 當然,我們做專案肯定會用到 UI 框架,常見的 Element 中的元件提供了這樣的方法。 但是,就算使用框架,有些時候還是要用到的,比如: El

關於PyQt5定義訊號的幾理解

訊號的定義 PyQt5中的訊號我的理解就像飯店出菜口的那個鈴,➡️ 需要的時候就是“叮”一下.然後廚師會叫出菜名或者桌號,服務員就會把菜送到正確的顧客桌上. 下面說正體:(此處不講什麼訊號與槽,single與slot,我覺得太複雜) 關於自定義訊號,你需要掌握

Android定義checkbox樣式

1.首先在drawable資料夾中新增drawable檔案checkbox_style.xml。 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas

flutter - 事件(一) - 定義一個方便的控制元件

android中,所有View都可以直接setOnClickListener, RN中也有TouchableHightlight這樣的控制元件可以直接套在外面,ios中也可以有UIControl 這樣的控制元件可以直接新增點選事件. 那麼flutter中有嗎? 答案自然是有. Ges

關於android定義字型顏色和改變字型顏色

先看效果圖 上面的為點選按下的效果圖 上面的為預設的(鬆開按鈕)的效果圖 首先我們先在values資料夾下新建一個color.xml檔案 這檔案就是配置我們要使用的顏色 程式碼如下 <?xml version="1.0" encoding

定義元件 空白處隱藏

程式碼實現: <template> <div> <div class="show" v-show="show" v-clickoutside="handleClose"> 顯示 </div>

[PyQt] 定義QSlider支援滑鼠和滾輪事件

from PyQt4.QtGui import * from PyQt4.QtCore import * class progressSlider(QSlider): def __init__(self, orientation, parent=None): su

ios-swift-為圖片控制元件(定義控制元件)新增事件

@IBOutlet var img_guanggao: UIImageView! override func viewDidLoad() { super.viewDidLoad(

百度地圖API定義覆蓋物與新增事件

本文適合零基礎百度地圖API開發者 效果圖1 效果圖2 直接上程式碼;另注:code上面很多是釣魚君自己寫的動態的資料,所以不能拿過去馬上可以用,本文只提供借鑑,不保證100%原創,但功能是修改之後已經實現。歡迎找茬,歡迎指教。 <body> <i

Android 定義可以滑動和的RangeBar

由於專案的需要實現可以滑動和點選的效果,就在網上搜了一下,發現基本上都是可以滑動的,於是自己就在別人的基礎上進行了一系列的修改。做成的效果圖如下 其實要想實現上面的效果並不是很難,只需要懂一些自定

Android定位&地圖&導航——基於百度地圖,實現定義圖示繪製並時彈出泡泡

public class MainActivity extends Activity { private EditText txtAddr; // 定位相關 LocationClient mLocClient; LocationData locData = nul

定義按鈕捕獲tabbarItem事件

用的是現在最多見的tabbar+navigitioncontroller框架,需要做到的在tabbar的某一個controller裡自定義一個按鈕,點選之後的效果如同點選了tabbar上的某一個item。實現的時候如果用push這個方法會造成頁面跳轉的情況,工程的業務邏輯就

WebView定義瀏覽器之在連結後使用其他瀏覽器開啟

只需要新增一下程式碼即可 webview.setWebViewClient(new WebViewClient() {    //重寫shouldOverrideUrlLoading方法,使點選連結後

HTML手機端定義dom實現按鈕效果

之前寫手機頁面時,感覺自帶button的陰影不好看,去掉之後又沒有了點選時的互動效果,使用者體驗很不好。bootstrap的按鈕顏色風格又太少了,還是自己寫才是王道。後來各種百度查到了如下方法,很簡單實用,特地記錄一下。主要是利用ontouchstart和ontouchend

iOS 一一 定義cell按鈕的事件(通知機制)

使用通知機制來實現 自定義cell按鈕的點選事件.使用通知機制來實現,沒有使用代理的方式規範. 1. 當點選cell上面的按鈕. 釋出通知 2. 在控制器的viewDidLoad方法中監聽通知.實現監聽通知的方法 3. 移除通知 程式碼如下: ZYOperatio

sublime3使用:定義快捷鍵、外掛安裝、語法校驗css和js

1.快捷鍵大全: https://mp.csdn.net/postedit/84336764 2.新增快捷鍵: 例:ctrl+q 開啟sublime編輯器 preference>>key bindings-user>>編輯設定文件, 輸入 { "key