解决布局与输入框隐藏的尴尬问题(一)

主要解决的问题:

页面布局中没有使用scrollview,但是有输入框,当获取焦点后,输入框会被键盘遮住,或其他控件被键盘遮住,无法滑动看到被键盘遮住的控件,使用以下代码,可解决此问题

调用部分:

layMain = findViewById(R.id.layMain);//该activity的根布局的控件

layLogin = findViewById(R.id.layLogin);//需要显示的键盘之上的最后一个View,该view必须值根布局的子view

//在Activity的onCreate里添加如下方法

SoftKeyInputScrollBy.addLayoutListener(layMain,layLogin);


核心代码(SoftKeyInputScrollBy):

public class SoftKeyInputScrollBy {

/**

* addLayoutListener方法如下

    * @param main 根布局,必须是正layout的根布局

    * @param scroll 需要显示的键盘之上的最后一个View,该view必须值根布局的子view

*/

    public static void addLayoutListener(final View main,final View scroll) {

main.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

            public void onGlobalLayout() {

Rect rect =new Rect();

//1、获取main在窗体的可视区域

                main.getWindowVisibleDisplayFrame(rect);

//2、获取main在窗体的不可视区域高度,在键盘没有弹起时,main.getRootView().getHeight()调节度应该和rect.bottom高度一样

                int screenHeight =main.getRootView().getHeight();//屏幕高度

                int mainInvisibleHeight =main.getRootView().getHeight() - rect.bottom;

Log.d("gyb","mainInvisibleHeight->" + mainInvisibleHeight +"--screenHeight---->" + screenHeight +"--rect.bottom-->" + rect.bottom +"");

//3、不可见区域大于屏幕本身高度的1/4:说明键盘弹起了

                if (mainInvisibleHeight > screenHeight /4) {

int[] location =new int[2];

scroll.getLocationInWindow(location);

// 4、获取Scroll的窗体坐标,算出main需要滚动的高度

                    int srollHeight = (location[1] +scroll.getHeight()) - rect.bottom;

Log.d("gyb","--location---->" + location[0] +"<-->" + location[1] +"--srollHeight ->" +scroll.getHeight() +"---srollHeight-->"+ srollHeight);

//5、让界面整体上移键盘的高度

                    main.scrollBy(0, srollHeight);

}else {

//3、不可见区域小于屏幕高度1/4时,说明键盘隐藏了,把界面下移,移回到原有高度

                    main.scrollTo(0,0);

}

}

});

}

}


补充说明:

activity的xml布局格式:


解决布局与输入框隐藏的尴尬问题(一)_第1张图片

具体原理解释请看这位博主的详细讲解:

https://blog.csdn.net/smileiam/article/details/69055963###;

你可能感兴趣的:(解决布局与输入框隐藏的尴尬问题(一))