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

首頁 > 系統 > Android > 正文

Android監聽軟鍵盤彈出與隱藏的兩種方法

2019-10-23 18:30:54
字體:
來源:轉載
供稿:網友

需求:

現在有一個需求是點擊一行文本框,彈出一個之前隱藏的輸入框,輸入完成后按返回鍵或者其他的東西隱藏鍵盤和輸入框,將輸入框的內容填充到文本框中。

實現:

拿到這個需求的第一反應就是寫一個監聽來監聽鍵盤的顯示和隱藏來控制輸入框的顯示和隱藏,控制文本框中的內容。
所以我做了如下操作:

  1. 指定android:windowSoftInputMode="adjustResize|stateAlwaysHidden"這個的做法是為了讓鍵盤彈出時改變布局。
  2. 讓Activity實現LayoutchangeListener,監聽布局的改變,當布局發生的改變為屏幕的1/3時我們認為是鍵盤導致的。
@Override  public void onLayoutChange(View v, int left, int top, int right,      int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {    //old是改變前的左上右下坐標點值,沒有old的是改變后的左上右下坐標點值    //現在認為只要控件將Activity向上推的高度超過了1/3屏幕高,就認為軟鍵盤彈起    if(oldBottom != 0 && bottom != 0 &&(oldBottom - bottom > keyHeight)){      Toast.makeText(MainActivity.this, "監聽到軟鍵盤彈起...", Toast.LENGTH_SHORT).show();    }else if(oldBottom != 0 && bottom != 0 &&(bottom - oldBottom > keyHeight)){      Toast.makeText(MainActivity.this, "監聽到軟件盤關閉...", Toast.LENGTH_SHORT).show();    }  }

問題:

沒錯,這樣確實是能夠做到監聽軟鍵盤的彈出和隱藏,這一切都是因為之前設置了indowSoftInputMode=adjustResize,但是當全屏模式下是這個屬性是無效的,鍵盤彈出和隱藏并不會觸發onLayouChangeListener。

而項目中使用了SystemBarTintManager之后,Activity就變成了全屏模式所以我做了如下操作

//contentlayout是最外層布局mChildOfContent = contentlayout.getChildAt(0);mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {     public void onGlobalLayout() {           possiblyResizeChildOfContent();  }});
private void possiblyResizeChildOfContent() {  int usableHeightNow = computeUsableHeight();  if (usableHeightNow != usableHeightPrevious) {       int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();       int heightDifference = usableHeightSansKeyboard - usableHeightNow;       if (heightDifference > (usableHeightSansKeyboard / 4)) {         // 鍵盤彈出       } else {         // 鍵盤收起         productInfo.setVisibility(View.GONE);         productInfoEnd.setText(productInfo.getText().toString());    }       mChildOfContent.requestLayout();        usableHeightPrevious = usableHeightNow;  }}
private int computeUsableHeight() {   Rect r = new Rect();  mChildOfContent.getWindowVisibleDisplayFrame(r);  return (r.bottom - r.top);}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙游县| 扶余县| 鱼台县| 客服| 永吉县| 宾川县| 神池县| 海丰县| 阿鲁科尔沁旗| 常熟市| 九台市| 洛浦县| 册亨县| 灵川县| 锡林郭勒盟| 平果县| 师宗县| 遂川县| 诸城市| 堆龙德庆县| 宜兴市| 惠来县| 甘肃省| 怀来县| 庄河市| 潮安县| 禄丰县| 札达县| 安平县| 清水县| 介休市| 晴隆县| 响水县| 且末县| 精河县| 普陀区| 新泰市| 开阳县| 绵阳市| 柳江县| 琼海市|