您好,登錄后才能下訂單哦!
大家好,我是夢辛工作室的靈,最近在幫客戶修改安卓程序時,有要求到一個按鈕要浮動在鍵盤的上方,下面大概講一下實現方法:
其實很簡單,分三步走
第一步 獲取當前屏幕的高度
Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay(); Point point = new Point(); defaultDisplay.getSize(point); height = point.y;
第二步 獲取當前屏幕可見區域的高度,用于判斷當前鍵盤是否隱藏或顯示
public void setFloatView(View root,View floatview){ this.root = root; //根節點 listener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); mcontext.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); int heightDifference = height - (r.bottom - r.top); // 實際高度減去可視圖高度即是鍵盤高度 boolean isKeyboardShowing = heightDifference > height / 3; if(isKeyboardShowing){ //鍵盤顯示 }else{ //鍵盤隱藏 } } }; root.getViewTreeObserver().addOnGlobalLayoutListener(listener); }
第三步 當鍵盤隱藏時讓按鈕 動畫移動至原有位置,當前鍵盤顯示時讓按鈕動畫移動至當前鍵盤的高度上方
if(isKeyboardShowing){ //鍵盤顯示 floatview.animate().translationY(-heightDifference).setDuration(0).start(); }else{ //鍵盤隱藏 floatview.animate().translationY(0).start(); }
然后我為了方便封裝了一個工具類 FloatBtnUtil,很好用,下面是代碼
/** * 夢辛靈 實現按鈕浮動工具 */ public class FloatBtnUtil { private static int height = 0; private Activity mcontext; private ViewTreeObserver.OnGlobalLayoutListener listener; private View root; public FloatBtnUtil(Activity mcontext){ this.mcontext = mcontext; if (height == 0){ Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay(); Point point = new Point(); defaultDisplay.getSize(point); height = point.y; } } public void setFloatView(View root,View floatview){ this.root = root; //視圖根節點 floatview // 需要顯示在鍵盤上的View組件 listener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); mcontext.getWindow().getDecorView().getWindowVisibleDisplayFrame(r); int heightDifference = height - (r.bottom - r.top); boolean isKeyboardShowing = heightDifference > height / 3; if(isKeyboardShowing){ floatview.animate().translationY(-heightDifference).setDuration(0).start(); }else{ floatview.animate().translationY(0).start(); } } }; root.getViewTreeObserver().addOnGlobalLayoutListener(listener); } public void clearFloatView(){ if (listener != null && root != null) root.getViewTreeObserver().removeOnGlobalLayoutListener(listener); } }
下面是使用代碼:
private void initFloatBtn() { FloatBtnUtil floatBtnUtil = new FloatBtnUtil(this); LinearLayout lin_bottom = (LinearLayout) this.findViewById(R.id.lin_bottom); LinearLayout lin_root = (LinearLayout)this.findViewById(R.id.lin_root); floatBtnUtil.setFloatView(lin_root,lin_bottom); }
總結
到此這篇關于android 實現按鈕浮動在鍵盤上方的文章就介紹到這了,更多相關android 實現按鈕浮動在鍵盤上方內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。