1. 程式人生 > >Android EditText與軟鍵盤的一些效果

Android EditText與軟鍵盤的一些效果

主要記錄幾個常見功能的實現:1、進入頁面EditText不自動獲取焦點;2、進入頁面自動彈出鍵盤;3、點選其他區域關閉鍵盤;4、軟鍵盤開啟與關閉的工具類

EditText不自動獲取焦點

在外層的父容器上做下簡單的配置就可以了,通過程式碼設定或者xml佈局檔案設定都可以。
程式碼設定:

 parentView.setFocusable(true);
 parentView.setFocusableInTouchMode(true);

佈局檔案設定:

 android:focusable="true"
 android:focusableInTouchMode="true"

android 進入頁面自動彈出鍵盤

進入頁面自動彈出鍵盤,首先要EditView獲得焦點,然後彈出鍵盤。如果EditView沒有焦點,但是鍵盤卻彈出來了,這就尷尬了。

  //獲取焦點 光標出現
  mEditText.setFocusable(true);
  mEditText.setFocusableInTouchMode(true);
  mEditText.requestFocus();

  // 這裡給出個延遲彈出鍵盤,如果直接彈出鍵盤會和介面view渲染一起,體驗不太好
  Timer timer = new Timer();
  timer.schedule(new TimerTask() {
            public
void run() { KeyboardTool.getInstances(mContext). toggleKeyboard(); } }, 256);

對比下直接顯示,和延遲顯示鍵盤的兩種效果
這是直接顯示鍵盤的效果:
Android 進入頁面自動彈出鍵盤

這是延遲顯示鍵盤的效果:
Android 進入頁面自動彈出鍵盤

發現錄製的效果對比並不明顯可以自己嘗試下。

android 點選其他區域關閉鍵盤

在activity或者fragment 中新增如下程式碼即可實現點選其他區域關閉鍵盤。

    // 獲取點選事件
    @Override
public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View view = getCurrentFocus(); if (isHideInput(view, ev)) { KeyboardTool.getInstances(mContext).toggleKeyboard(); } } return super.dispatchTouchEvent(ev); } // 判定是否需要隱藏 private boolean isHideInput(View v, MotionEvent ev) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); return (ev.getX() > left && ev.getX() < right && ev.getY() > top && ev.getY() < bottom); } return false; }

android 軟鍵盤工具類

public class KeyboardTool {

    private static KeyboardTool keyboardManager;
    private Context mContext;
    private InputMethodManager imm;

    private KeyboardTool(Context context) {
        this.mContext = context;
        // 得到InputMethodManager的例項
        imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    }

    public static KeyboardTool getInstances(Context context) {
        if (keyboardManager == null) {
            keyboardManager = new KeyboardTool(context);
        }
        return keyboardManager;
    }

    /**
     * 切換軟鍵盤的顯示與隱藏
     */
    public void toggleKeyboard() {
//        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }

    /**
     * 判斷軟鍵盤是否顯示
     *
     * @return 軟鍵盤狀態
     */
    public boolean keyboardIsActive() {
        return imm.isActive();
    }

    /**
     * 彈出軟鍵盤
     */
    public void showKeyboard(View view) {
        imm.showSoftInput(view, 0);
    }

    /**
     * 針對於EditText 獲得焦點,顯示軟鍵盤
     *
     * @param edit EditText
     */
    public void showKeyboard(EditText edit) {
        edit.setFocusable(true);
        edit.setFocusableInTouchMode(true);
        edit.requestFocus();
        imm.showSoftInput(edit, 0);
    }

    /**
     * 關閉軟鍵盤
     * 針對於 有一個特定的view(EditText)
     *
     * @param view view
     */
    public void hideKeyboard(View view) {
        if (imm.isActive()) {
            // 關閉軟鍵盤,開啟方法相同,這個方法是切換開啟與關閉狀態的
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }

    /**
     * 針對於EditText ,失去焦點,隱藏軟體盤
     *
     * @param edit
     */
    public void hideKeyboard(EditText edit) {
        edit.clearFocus();
        imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
    }

    /**
     * 隱藏軟鍵盤
     */
    public void hideKeyboard() {
        View view = ((Activity) mContext).getWindow().peekDecorView();
        if (view != null) {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}

相關推薦

Android EditText鍵盤一些效果

主要記錄幾個常見功能的實現:1、進入頁面EditText不自動獲取焦點;2、進入頁面自動彈出鍵盤;3、點選其他區域關閉鍵盤;4、軟鍵盤開啟與關閉的工具類 EditText不自動獲取焦點 在外層的父容器上做下簡單的配置就可以了,通過程式碼設定或者xml佈局檔案

Android EditText鍵盤遮蓋

問題:EditText 第二次點選時,彈出來的軟鍵盤會把EditText遮蓋掉。   描述:設定了一個EditText,在靠近螢幕的底部,第一次點選EditText,彈起軟鍵盤, 這時候EditText會跟隨軟鍵盤上升,這時再次手動隱藏軟鍵盤,然後再次點選EditText,

Android Edittext 關掉鍵盤自動彈出

  在開發中,遇見了在這樣的需求,開啟一個頁面有一個EditText,進入都還沒載入利索就自動打開了軟鍵盤,不能夠第一眼看到整個頁面的設計,感覺很不友好,需要將軟鍵盤的自動開啟關掉。      法1.網上有個教程是讓EditText失去焦點,程式碼如下,反正

Android PopupWindow鍵盤的遮擋問題

PopupWindow含有輸入框時,點選輸入框,軟鍵盤可能會擋住PopupWindow,而我們希望的是軟鍵盤能夠把PopupWindow給頂上去。 設定 popupWindow.setSoftIn

Android如何將鍵盤迴車換成搜尋等按鈕,EditText中imeOptions屬性的使用

一、效果圖 如上圖,在使用鍵盤輸入的時候,有時我們可以看到回車鍵是“下一步”、“搜尋”、“確認”等,那麼這個效果要怎麼做呢?其實很簡單,我們只需要在EditText中設定imeOptions這個屬性就行了。     <EditText         androi

Android解決被鍵盤遮擋的EditText問題

1,在xml中Activity新增配置 android:windowSoftInputMode="stateVisible|adjustResize" 我先試的是這個,不能解決問題 2,在onCr

AndroidEditText 遇到鍵盤遮擋底部一點的問題

1.問題描述:   專案中某個佈局檔案(佈局相當複雜)新增EditText輸入框,在清單檔案對應activity中設定屬性   android:windowSoftInputMode="adjustResize"  ,彈出軟體盤不存在遮蓋問題。但是一旦給這個EditText設

Android 監聽鍵盤按鍵改變鍵盤右下角按鍵樣式

android:singleline=”true” android:imeoptions=”actionSearch” 一定要加singleline=”true”!!! actionN

EditText文字改變鍵盤的監聽事件

    對於EditText對於從事android開發的人來說非常的熟悉,但是能熟練的應用這個控制元件也需要自己多花點心才能熟於心.我將寫寫關於自己在實際開發中所遇到的坑和問題及解決方案.  使用場景:   1.對EditText上輸入的文字時時的去監聽: 使用程

android開發中,ListView中輸入框鍵盤的坑

這兩天遇到了一個頭疼的問題,一直沒找到好久辦法,各種百度,google,看了很多大牛們的帖子後,才找到了一點思路,下面我就把解決辦法給大家分享一下。 主要的問題是:ListView中edittext,輸入資料的時候,軟鍵盤彈出,但是輸入完成後,如果不大軟鍵盤縮回去,輸入的

android強制隱藏鍵盤以及取消EditText的焦點

 /** * root為需要點選取消edittext焦點的layout*/ root.setOnTouchListener(new View.OnTouchListener() { @Override pub

android Fragment獲取EditText鍵盤中輸入下一個action的監聽

今天是2016年的第2天,還是覺得作為一個程式設計師,寫寫部落格來回顧自己在開發中遇到的一些問題,對自己來說是一個不錯的技術積累方式。這可以讓我對所遇到的問題有個更深刻的印象,也能對有遇到相同問題的朋友們能有個參考,廢話不多說,進入正題吧! E

Android:隱藏輸入法鍵盤

內部 encoding utf-8 res ger 裏的 trac mini 對象 1.概述 1) 給LinearLayout 註冊click 事件,點擊後隱藏輸入法軟鍵盤。為什麽要叫軟鍵盤,很奇怪呢。通過Activity 的getSystem(Context.INPUT_

EditText鍵盤擋住

大家在佈局時候,有時候會發現輸入框被擋住一部分,能完全顯示出來,但是系統自帶簡訊介面 可以完全漂浮在軟鍵盤之上,看了一下簡訊原始碼,修改一下輸入模式就可以了,原始碼如下 程式碼方式:   getWindow().setSoftInputMode(WindowMan

EditText虛擬鍵盤——開發記錄

開發記錄,使用虛擬鍵盤常用的一些小技巧,開發中遇到一些坑。 前言:EditText控制元件 和 虛擬鍵盤在開發中時常使用到,在一些特殊場景EditText的使用並不像我們所想的那麼順心,今天開發中就遇到一些問題,一般問題百度均可解決,但是很耽擱時間。所以就把所需使用到小技巧記錄下來,以便之後使用。

android5.0 物理鍵盤鍵盤同時使用修改

最近工作中遇到在android 5.0 系統插入硬體盤物理裝置後,軟鍵盤無法彈出的問題,在網上查找了相關資料: 參考:http://blog.csdn.net/DrakeBlue/article/details/39049495         &

android-func-隱藏鍵盤

/** * 隱藏軟鍵盤 */ private void hideInputWindow() { ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)) .hideSoftInputFromWi

android 禁止系統鍵盤,攔截鍵盤事件

在Edittext中設定 .setInputType(InputType.TYPE_NULL); public void disableShowInput(){ if (android.os.Build.VERSION.SDK_INT <= 10){ editText.setIn

解決EditText鍵盤覆蓋的問題

1、新增類AndroidBug5497Workaround: public class AndroidBug5497Workaround { public static void assistActivity(View content) { new Androi

android 監聽鍵盤在頁面的展開和隱藏

獲取軟鍵盤狀態思路: 獲取當前頁面根佈局及其高度 RootH; 獲取狀態列高度 StatusH和導航欄高度 NavigationH; 獲取當前根檢視在螢幕上顯示的高度RectH; 高度差值比較,(根佈局高度 - 根檢視顯示高度)與(狀態列高度 + 導航欄高度)的大小對