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 點選其他區域關閉鍵盤
在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
【Android】EditText 遇到軟鍵盤遮擋底部一點的問題
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; 高度差值比較,(根佈局高度 - 根檢視顯示高度)與(狀態列高度 + 導航欄高度)的大小對