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

首頁 > 系統 > Android > 正文

Android 彈出軟鍵盤所遇到的坑及解決方法

2019-12-12 03:52:26
字體:
來源:轉載
供稿:網友

demo下載

重要代碼:

//1、此layout作為最外層的layout;//2、設置需要調整的view: setAdjustView(View view);//3、如果需要控制輸入框的顯示與隱藏,可以實現OnInputViewVisibleListener接口;public class SoftInputAdjustLayout extends RelativeLayout {  private static final String TAG = SoftInputAdjustLayout.class.getSimpleName();  private View adjustView;  public SoftInputAdjustLayout(Context context) {    this(context, null);  }  public SoftInputAdjustLayout(Context context, AttributeSet attrs) {    this(context, attrs, 0);  }  public SoftInputAdjustLayout(Context context, AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);    this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {      @Override      public void onGlobalLayout() {        try {          Rect r = new Rect();          getWindowVisibleDisplayFrame(r);          int heightDiff = getRootView().getHeight() - (r.bottom - r.top);          if (heightDiff > 100) {            if (onInputViewVisibleListener != null) {              onInputViewVisibleListener.onShowInputView();            }          } else {            if (onInputViewVisibleListener != null) {              onInputViewVisibleListener.onHideInputView();            }          }        } catch (Exception e) {          e.printStackTrace();        }      }    });  }  /**   * 需要調整的view   *   * @param adjustView   */  public void setAdjustView(View adjustView) {    this.adjustView = adjustView;  }  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    if (adjustView != null) {      Rect rect = new Rect();      getWindowVisibleDisplayFrame(rect);      int totalHeight = getHeight();      int nowHeight = rect.bottom - rect.top;      int keyBoardHeight = totalHeight - nowHeight;      if (keyBoardHeight > totalHeight / 4) {        super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(totalHeight, MeasureSpec.EXACTLY));        LayoutParams params = (LayoutParams) adjustView.getLayoutParams();        params.bottomMargin = keyBoardHeight;      } else {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        LayoutParams params = (LayoutParams) adjustView.getLayoutParams();        params.bottomMargin = 0;      }    } else {      super.onMeasure(widthMeasureSpec, heightMeasureSpec);    }  }  private OnInputViewVisibleListener onInputViewVisibleListener;  public void setOnInputViewVisibleListener(OnInputViewVisibleListener listener) {    onInputViewVisibleListener = listener;  }  public interface OnInputViewVisibleListener {    void onShowInputView();    void onHideInputView();  }}

備注:

全屏模式:

1、通過style或者setFlags(…)來設置全屏;

2、AndroidManifest.xml中activity設置:android:windowSoftInputMode=”adjustResize”;

3、此layout必須作為布局的最外層layout;

4、一定要在布局中添加一個view,如下:

 <!--此view用于獲取焦點,當軟件盤彈出時,根據此view來彈出,而此view在最頂部,且大小為0,所以軟件盤彈出,不會把背景頂上去-->  <View    android:layout_width="0px"    android:layout_height="0px"    android:focusable="true" android:focusableInTouchMode="true" />

5、通過setAdjustView(View view)來設置需要調整的view;

6、在全屏模式下,輸入框開始是未顯示的,直到彈出軟鍵盤,才會顯示輸入框。因為如果輸入框一開始就顯示,那軟鍵盤就會根據輸入框來彈出,且輸入框在底部,那就可能造成把整個view頂上去。所以這時我們應該實現OnInputViewVisibleListener這個接口來控制輸入框的顯示與隱藏。

非全屏模式

1、AndroidManifest.xml中activity設置:android:windowSoftInputMode=”adjustResize”;

2、此layout必須作為布局的最外層layout;

3、通過setAdjustView(View view)來設置需要調整的view;

4、如果需要控制輸入框的顯示與隱藏,就實現OnInputViewVisibleListener這個接口。

以上所述是小編給大家介紹的Android 彈出軟鍵盤所遇到的坑及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 满洲里市| 洞口县| 苏尼特左旗| 双城市| 旬阳县| 尖扎县| 息烽县| 增城市| 佛学| 拜城县| 山丹县| 鄂温| 托克逊县| 察隅县| 西林县| 广宁县| 荆门市| 马山县| 二手房| 日照市| 广东省| 都兰县| 华蓥市| 贡山| 融水| 洛浦县| 广汉市| 同江市| 平邑县| 荆州市| 商南县| 沂源县| 肃南| 汤原县| 马尔康县| 元阳县| 同仁县| 苏州市| 灵璧县| 昭觉县| 江达县|