您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Android 開發中怎么實現彈出軟鍵盤,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
具體方法如下:
//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 開發中怎么實現彈出軟鍵盤就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。