編輯:關於Android編程
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 彈出軟鍵盤所遇到的坑及解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對本站網站的支持!
(一)前言今天我們一起來看一下ViewPagerAndroid組件完成解析以及仿照實現美團首頁頂部效果。剛創建的React Native技術交流群(282693535),
本文結合之前的動態創建fragment來進行一個實踐,來實現用Fragment創建一個選項卡項目布局<LinearLayout xmlns:android=http
Android支持的數據格式 數據格式的Intent filter AndroidManifest.xml文件中,要像向下列示例那樣
百度視頻播放器是百度公司推出的一款為Android用戶精心優化的免費視頻應用,集視頻搜索、視頻推薦、離線觀看、劇集提醒等等眾多創新優秀功能於一身。它不僅僅是