android 输入法盖住下面的按钮(android全屏下的输入框未跟随软键盘弹起问题)

最近开发中遇到,全屏模式下输入框在底部不会跟随软键盘弹起于是网上搜索了解决的方案大致找到了两种方案,今天小编就来聊一聊关于android 输入法盖住下面的按钮?接下来我们就一起去研究一下吧!

android 输入法盖住下面的按钮(android全屏下的输入框未跟随软键盘弹起问题)

android 输入法盖住下面的按钮

最近开发中遇到,全屏模式下输入框在底部不会跟随软键盘弹起。于是网上搜索了解决的方案。大致找到了两种方案。

第一种

定义好此类

public class SoftKeyBoardListener { private View rootView;//activity的根视图 int rootViewVisibleHeight;//纪录根视图的显示高度 private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener; public SoftKeyBoardListener(Activity Activity) { //获取activity的根视图 rootView = activity.getWindow().getDecorView(); //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变 rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //获取当前根视图在屏幕上显示的大小 Rect r = new Rect(); rootView.getWindowVisibleDisplayframe(r); int visibleHeight = r.height(); System.out.println("" visibleHeight); if (rootViewVisibleHeight == 0) { rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变 if (rootViewVisibleHeight == visibleHeight) { return; } //根视图显示高度变小超过200,可以看作软键盘显示了 if (rootViewVisibleHeight - visibleHeight > 200) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight); } rootViewVisibleHeight = visibleHeight; return; } //根视图显示高度变大超过200,可以看作软键盘隐藏了 if (visibleHeight - rootViewVisibleHeight > 200) { if (onSoftKeyBoardChangeListener != null) { onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight); } rootViewVisibleHeight = visibleHeight; return; } } }); } private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener; } public interface OnSoftKeyBoardChangeListener { void keyBoardShow(int height); void keyBoardHide(int height); } public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) { SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity); softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener); } }

在Activity中实现

private SoftKeyBoardListener.OnSoftKeyBoardChangeListener changeListener = new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() { @Override public void keyBoardShow(int height) { //软键盘弹起,inputEt为底部输入框 ObjectAnimator animator = ObjectAnimator.ofFloat(inputEt, "translationY", 0, -height); animator.setDuration(100); animator.start(); edit.setFocusable(true); edit.setFocusableInTouchMode(true); edit.requestFocus();//获取焦点 光标出现 } @Override public void keyBoardHide(int height) { //软键盘隐藏 ObjectAnimator animator = ObjectAnimator.ofFloat(inputEt, "translationY", -height, 0); animator.setDuration(100); animator.start(); } };

第二种此方法在全屏模式webview的输入框被遮盖时可以解决。

public class KeyBoardListener { private Activity activity; // private Handler mhanHandler; private View mChildOfContent; private int usableHeightPrevious; private FrameLayout.LayoutParams frameLayoutParams; private static KeyBoardListener keyBoardListener; public static KeyBoardListener getInstance(Activity activity) { // if(keyBoardListener==null){ keyBoardListener = new KeyBoardListener(activity); // } return keyBoardListener; } public KeyBoardListener(Activity activity) { super(); // TODO Auto-generated constructor stub this.activity = activity; // this.mhanHandler = handler; } public void init() { final FrameLayout content = (FrameLayout) activity .findViewById(android.R.id.content); mChildOfContent = content.getChildAt(0); // content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { // int rootViewHeight; // @Override // public void onGlobalLayout() { // int viewHeight = content.getHeight(); // if (rootViewHeight != viewHeight) { // rootViewHeight = viewHeight; // if (viewHeight == getRealHeight()) { // //隐藏虚拟按键 // if (navigationListener != null) { // navigationListener.hide(); // } // } else { // //显示虚拟按键 // if (navigationListener != null) { // navigationListener.show(); // } // } // } // } // }); mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { possiblyResizeChildOfContent(); } }); frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent .getLayoutParams(); } private void possiblyResizeChildOfContent() { int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) { int usableHeightSansKeyboard = 0; if(getNavigationBarHeight(activity) == getRealHeight() - getHeight()){ usableHeightSansKeyboard = getHeight(); }else{ usableHeightSansKeyboard = getRealHeight(); } int heightDifference = usableHeightSansKeyboard - usableHeightNow; if (heightDifference > (usableHeightSansKeyboard / 4)) { // keyboard probably just became visible frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; } else { // keyboard probably just became hidden frameLayoutParams.height = usableHeightSansKeyboard; } mChildOfContent.requestLayout(); usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mChildOfContent.getWindowVisibleDisplayFrame(r); return (r.bottom - r.top); } // private void showLog(String title, String msg) { // Log.d("Unity", title "------------>" msg); // } /** * 获取屏幕真实高度(包括虚拟键盘) */ public static int getRealHeight() { windowManager windowManager = (WindowManager) MyApp.mApp.getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); DisplayMetrics dm = new DisplayMetrics(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { display.getRealMetrics(dm); } else { display.getMetrics(dm); } int realHeight = dm.heightPixels; return realHeight; } /** * 获取手机屏幕高度 */ public static int getHeight() { WindowManager windowManager = (WindowManager) MyApp.mApp.getSystemService(Context.WINDOW_SERVICE); LogUtil.e("height->",windowManager.getDefaultDisplay().getHeight() "aa"); return windowManager.getDefaultDisplay().getHeight(); } public static int getNavigationBarHeight(Activity activity) { Resources resources = activity.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); //获取NavigationBar的高度 int height = resources.getDimensionPixelSize(resourceId); return height; } }

在Activity中的实现:

KeyBoardListener.getInstance(this).init();

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页