android 實現(xiàn)按鈕浮動在鍵盤上方的實例代碼
大家好,我是夢辛工作室的靈,最近在幫客戶修改安卓程序時,有要求到一個按鈕要浮動在鍵盤的上方,下面大概講一下實現(xiàn)方法:
其實很簡單,分三步走
第一步 獲取當前屏幕的高度
Display defaultDisplay = mcontext.getWindowManager().getDefaultDisplay(); Point point = new Point(); defaultDisplay.getSize(point); height = point.y;
第二步 獲取當前屏幕可見區(qū)域的高度,用于判斷當前鍵盤是否隱藏或顯示
public void setFloatView(View root,View floatview){
this.root = root; //根節(jié)點
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,很好用,下面是代碼
/**
* 夢辛靈 實現(xiàn)按鈕浮動工具
*/
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; //視圖根節(jié)點 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 實現(xiàn)按鈕浮動在鍵盤上方的文章就介紹到這了,更多相關android 實現(xiàn)按鈕浮動在鍵盤上方內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android如何自定義View實現(xiàn)橫向的雙水波紋進度條
最近有個需求需要實現(xiàn)自定義加載進度條,于是深入研究了一下,這篇文章主要給大家介紹了關于Android如何自定義View實現(xiàn)橫向的雙水波紋進度條的相關資料,需要的朋友可以參考下2021-11-11
基于RecyclerView實現(xiàn)橫向GridView效果
這篇文章主要為大家詳細介紹了基于RecyclerView實現(xiàn)橫向GridView效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android中關于CoordinatorLayout的一些實用布局技巧
大家都知道CoordinatorLayout是一個“加強版”的 FrameLayout,那么下面這篇文章主要給大家分享了Android中關于CoordinatorLayout的一些布局技巧,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-06-06
Android自定義view 你所需要知道的基本函數(shù)總結
這篇文章主要介紹了Android自定義view 你所需要知道的基本函數(shù)的相關資料,需要的朋友可以參考下2017-02-02
Android Loop機制中Looper與handler詳細分析
Handler是Android線程之間的消息機制,主要的作用是將一個任務切換到指定的線程中去執(zhí)行,準確的說是切換到構成Handler的looper所在的線程中去出處理。本文將詳細介紹Android Handler機制和Looper Handler Message關系2022-11-11
Android 自定義SeekBar 實現(xiàn)分段顯示不同背景顏色的示例代碼
這篇文章主要介紹了Android 自定義SeekBar 實現(xiàn)分段顯示不同背景顏色,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06

