logo免费网站,手表网站欧米茄价格,设计网站注意哪些问题,seo网络推广培训班背景 刚开始做Android的时候#xff0c;有一次遇到输入框位于页面底部#xff0c;弹出的键盘老是遮挡输入框#xff0c;这就给人一种感觉----不咋舒服。当时#xff0c;网上百度了一遍#xff0c;后面终于解决了#xff0c;由于当时天天加班#xff0c;没时间写博客有一次遇到输入框位于页面底部弹出的键盘老是遮挡输入框这就给人一种感觉----不咋舒服。当时网上百度了一遍后面终于解决了由于当时天天加班没时间写博客现在把他放出出来也是总结下多年前的技术。解决方案有以下几种
一、在activity的oncreate方法中setContentView之前加上如下代码
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
二、在AndroidManifest.xml文件中对应的activity中加入。
android:windowSoftInputModestateVisible|adjustResize
或
android:windowSoftInputModestateHidden|adjustResize在这设置的值(除stateUnspecified和adjustUnspecified以外)将覆盖在主题中设置的值各值的含义【A】stateUnspecified软键盘的状态并没有指定系统将选择一个合适的状态或依赖于主题的设置【B】stateUnchanged当这个activity出现时软键盘将一直保持在上一个activity里的状态无论是隐藏还是显示【C】stateHidden用户选择activity时软键盘总是被隐藏【D】stateAlwaysHidden当该Activity主窗口获取焦点时软键盘也总是被隐藏的【E】stateVisible软键盘通常是可见的【F】stateAlwaysVisible用户选择activity时软键盘总是显示的状态【G】adjustUnspecified默认设置通常由系统自行决定是隐藏还是显示【H】adjustResize该Activity总是调整屏幕的大小以便留出软键盘的空间【I】adjustPan当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
效果会让屏幕整体上移
三、借用别人的SoftHideKeyBoardUtil工具类 使用方式直接在Activity页面的onCreate方法中加入 SoftHideKeyBoardUtil.assistActivity(this); SoftHideKeyBoardUtil工具类代码 /*** android全屏沉浸式状态栏下* 键盘挡住输入框解决工具类*/
public class SoftHideKeyBoardUtil {public static void assistActivity(Activity activity) {new SoftHideKeyBoardUtil(activity);}private View mChildOfContent;private int usableHeightPrevious;private FrameLayout.LayoutParams frameLayoutParams;private SoftHideKeyBoardUtil(Activity activity) {//1找到Activity的最外层布局控件它其实是一个DecorView,它所用的控件就是FrameLayoutFrameLayout content (FrameLayout) activity.findViewById(android.R.id.content);//2获取到setContentView放进去的ViewmChildOfContent content.getChildAt(0);//3给Activity的xml布局设置View树监听当布局有变化如键盘弹出或收起时都会回调此监听mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {//4软键盘弹起会使GlobalLayout发生变化public void onGlobalLayout() {//5当前布局发生变化时对Activity的xml布局进行重绘possiblyResizeChildOfContent();}});//6获取到Activity的xml布局的放置参数frameLayoutParams (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();}// 获取界面可用高度如果软键盘弹起后Activity的xml布局可用高度需要减去键盘高度private void possiblyResizeChildOfContent() {//1获取当前界面可用高度键盘弹起后当前界面可用布局会减少键盘的高度int usableHeightNow computeUsableHeight();//2如果当前可用高度和原始值不一样if (usableHeightNow ! usableHeightPrevious) {//3获取Activity中xml中布局在当前界面显示的高度int usableHeightSansKeyboard mChildOfContent.getRootView().getHeight();//4Activity中xml布局的高度-当前可用高度int heightDifference usableHeightSansKeyboard - usableHeightNow;//5高度差大于屏幕1/4时说明键盘弹出if (heightDifference (usableHeightSansKeyboard / 4)) {// 6键盘弹出了Activity的xml布局高度应当减去键盘高度frameLayoutParams.height usableHeightSansKeyboard - heightDifference;} else {//6键盘收起了Activity的xml布局高度应当和可用高度一样frameLayoutParams.height usableHeightSansKeyboard;}//7 重绘Activity的xml布局mChildOfContent.requestLayout();usableHeightPrevious usableHeightNow;}}private int computeUsableHeight() {Rect r new Rect();mChildOfContent.getWindowVisibleDisplayFrame(r);// 全屏模式下直接返回r.bottomr.top其实是状态栏的高度return (r.bottom - r.top);}}四、Layout上面再加一层ScrollView的封装 最终选择第三种方法完美解决所遇到问题。