国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android點擊EditText文本框之外任何地方隱藏鍵盤的解決辦法

2019-12-12 03:53:58
字體:
來源:轉載
供稿:網友

1,實現方法一:

通過給當前界面布局文件的父layout設置點擊事件(相當于給整個Activity設置點擊事件),在事件里進行鍵盤隱藏

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/traceroute_rootview"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:background="@color/white"   android:clickable="true"   android:gravity="center_horizontal"   android:orientation="vertical" > </LinearLayout> 

加上id和clickable=true

然后在onCreate里,添加onClick事件的監聽:

findViewById(R.id.traceroute_rootview).setOnClickListener(this); 

在onClick中:

@Override public void onClick(View v) {   switch (v.getId()) {   case R.id.traceroute_rootview:      InputMethodManager imm = (InputMethodManager)      getSystemService(Context.INPUT_METHOD_SERVICE);      imm.hideSoftInputFromWindow(v.getWindowToken(), 0);     break;   } }

這樣就可以完美的解決了輸入框外的隱藏效果,對于布局不是特別復雜或是其它觸摸事件少的情況下可以使用。

2,實現思路二:

通過dispatchTouchEvent每次ACTION_DOWN事件中動態判斷非EditText本身區域的點擊事件,然后在事件中進行屏蔽。

@Override public boolean dispatchTouchEvent(MotionEvent ev) {   if (ev.getAction() == MotionEvent.ACTION_DOWN) {     View v = getCurrentFocus();     if (isShouldHideInput(v, ev)) {        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);       if (imm != null) {         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);       }     }     return super.dispatchTouchEvent(ev);   }   // 必不可少,否則所有的組件都不會有TouchEvent了   if (getWindow().superDispatchTouchEvent(ev)) {     return true;   }   return onTouchEvent(ev); } 

isShoudHideInput(View v,MotionEvent e)方法:

public boolean isShouldHideInput(View v, MotionEvent event) {   if (v != null && (v instanceof EditText)) {     int[] leftTop = { 0, 0 };     //獲取輸入框當前的location位置     v.getLocationInWindow(leftTop);     int left = leftTop[0];     int top = leftTop[1];     int bottom = top + v.getHeight();     int right = left + v.getWidth();     if (event.getX() > left && event.getX() < right         && event.getY() > top && event.getY() < bottom) {       // 點擊的是輸入框區域,保留點擊EditText的事件       return false;     } else {       return true;     }   }   return false; } 

這種方法實現起來比較麻煩,解決思路與iOS中的事件分發機制是類似,對于處理隱藏事件比較清晰,通過層層事件分發,然后判斷是否在需要屏蔽的區域。

1,實現方法一:

通過給當前界面布局文件的父layout設置點擊事件(相當于給整個Activity設置點擊事件),在事件里進行鍵盤隱藏

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:id="@+id/traceroute_rootview"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:background="@color/white"   android:clickable="true"   android:gravity="center_horizontal"   android:orientation="vertical" > </LinearLayout> 

加上id和clickable=true

然后在onCreate里,添加onClick事件的監聽:

findViewById(R.id.traceroute_rootview).setOnClickListener(this); 

在onClick中:

@Override public void onClick(View v) {   switch (v.getId()) {   case R.id.traceroute_rootview:      InputMethodManager imm = (InputMethodManager)      getSystemService(Context.INPUT_METHOD_SERVICE);      imm.hideSoftInputFromWindow(v.getWindowToken(), 0);     break;   } }

這樣就可以完美的解決了輸入框外的隱藏效果,對于布局不是特別復雜或是其它觸摸事件少的情況下可以使用。

2,實現思路二:

通過dispatchTouchEvent每次ACTION_DOWN事件中動態判斷非EditText本身區域的點擊事件,然后在事件中進行屏蔽。

@Override public boolean dispatchTouchEvent(MotionEvent ev) {   if (ev.getAction() == MotionEvent.ACTION_DOWN) {     View v = getCurrentFocus();     if (isShouldHideInput(v, ev)) {       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);       if (imm != null) {         imm.hideSoftInputFromWindow(v.getWindowToken(), 0);       }     }     return super.dispatchTouchEvent(ev);   }   // 必不可少,否則所有的組件都不會有TouchEvent了   if (getWindow().superDispatchTouchEvent(ev)) {     return true;   }   return onTouchEvent(ev); } 

isShoudHideInput(View v,MotionEvent e)方法:

public boolean isShouldHideInput(View v, MotionEvent event) {   if (v != null && (v instanceof EditText)) {     int[] leftTop = { 0, 0 };     //獲取輸入框當前的location位置     v.getLocationInWindow(leftTop);     int left = leftTop[0];     int top = leftTop[1];     int bottom = top + v.getHeight();     int right = left + v.getWidth();     if (event.getX() > left && event.getX() < right         && event.getY() > top && event.getY() < bottom) {       // 點擊的是輸入框區域,保留點擊EditText的事件       return false;     } else {       return true;     }   }   return false; } 

這種方法實現起來比較麻煩,解決思路與iOS中的事件分發機制是類似,對于處理隱藏事件比較清晰,通過層層事件分發,然后判斷是否在需要屏蔽的區域。

以上所述是小編給大家介紹的Android點擊EditText文本框之外任何地方隱藏鍵盤的解決辦法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永城市| 错那县| 大化| 浙江省| 许昌市| 平舆县| 抚顺市| 新邵县| 甘肃省| 渭源县| 三江| 兰州市| 舞阳县| 黑龙江省| 石家庄市| 枞阳县| 石家庄市| 英德市| 昌乐县| 牡丹江市| 荥阳市| 安达市| 南和县| 葵青区| 来凤县| 博客| 天台县| 尼玛县| 清水河县| 班玛县| 滨海县| 遂平县| 宁都县| 内黄县| 罗源县| 中超| 靖安县| 六盘水市| 乡城县| 威海市| 正蓝旗|