布局被软键盘遮挡虽然不是什么大问题,但还是比较影响用户体验的;最让人恼火的是当前输入框被软键盘被遮挡,来看一下解决方法;

1、当前输入框被软键盘遮挡,仅把输入框显示出来,不改变整体布局;

设置Manifest:

android:windowSoftInputMode="adjustPan"

代码设置:要在setContentView之前

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

2、如果需求这样告诉你,输入框下面的登录按钮也要显示出来;那么用第一种方式就不行了;

这个是测试给提出的BUG:说在左边的这个手机 登录按钮、忘记密码、账号注册,这几个地方被软键盘遮挡了;右边的手机显示正常;

我回复他:你手机屏幕小,我能有什么办法;

然后需求告诉我:兼容性问题,开发请修改;

无奈```开始修改吧!

我的思路是这样的:1、这个登录界面的最外层布局使用ScrollView,因为它可以上下滚动;

2、如果输入框EditText被触摸或焦点发生变化,这时软键盘会弹出,键盘弹出后改变ScrollView的位置,让其显示最下面;

代码如下:

       etMobile.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
initlist();
}
});
etMobile.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
initlist();
return false;
}
});
etCodePassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
initlist();
}
});
etCodePassword.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
initlist();
return false;
}
});
private void initlist() {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
sc.postDelayed(new Runnable() {
@Override
public void run() {
sc.smoothScrollTo(0,sc.getHeight());
}
}, 300);
}

效果图如下:

但是,如果这个界面是全屏显示,沉浸式的话,ScrollView改变位置就不能使用了;

3、改变布局,让登录按钮显示出来;

大致思路:监听软键盘是否显示,如果软键盘显示,就把输入框以上的布局隐藏GONE了;

代码实现:(监听界面发生改变的使用最外层的布局)

//监听界面是否发生改变(如果发生改变我们我认为软键盘有变化)
sc.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
sc.postDelayed(new Runnable() {
@Override
public void run() {
//判断现在软键盘的开关状态
if(SoftKeyboardUtils.isSoftShowing(LoginActivity.this)){
rl.setVisibility(View.GONE);
StatusBarCompat.setLightStatusBarColor(LoginActivity.this); //关闭沉浸式
}else{
rl.setVisibility(View.VISIBLE);
StatusBarCompat.translucentStatusBar(LoginActivity.this, true); //开启沉浸式
}
}
},100L);
}
});

SoftKeyboardUtils是我抽取监听软键盘的工具类:https://blog.csdn.net/qq_35605213/article/details/80763863

效果如下:(可以做一个隐藏的动画,效果会好一点)

              

Android软键盘遮挡布局问题;的更多相关文章

  1. Android软键盘遮挡布局的那些事

    有朋友提到软键盘遮挡布局的问题,说网上找了很多资料都未能解决,下面我来总结一下那些事,有些内容也是从网友那里学来的,但是我都会自己验证正确了才会贴出来. 首先来分析下我们常见的遮挡问题有哪些(本次所说 ...

  2. Android软键盘遮挡的四种解决方案

    问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...

  3. 关于Android软键盘把布局顶上去的问题(一)

    最近接触到了一个登陆页面,布局最上面显示的是一个波纹的view,中间显示账号和密码的EditText,紧接着还有一个Button: 希望:点击EditText时,软键盘不能把波纹的view顶出去,也不 ...

  4. 关于Android软键盘把布局顶上去的问题

    首先说下我的需求:布局最上面是一个bar,有左上角返回按钮和标题,bar下面是一个ScrollView,里面有各种TextView和EditText, 点击下面的EditText时,不希望软键盘把ba ...

  5. Android软键盘弹出,覆盖h5页面输入框问题

    之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位 ...

  6. Android软键盘的隐藏显示、事件监听的代码

    把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...

  7. Android 软键盘弹出,界面整体上移

    在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看:要解决这个问题,我们需要用到 windowSo ...

  8. Android 软键盘监听事件

    Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入.     那么,弹出软键盘后必然会造成原有布局高度的减少 ...

  9. 完美解决android软键盘监听

    最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收 ...

随机推荐

  1. 20165308 实验二 Java面向对象程序设计

    20165308 实验二 Java面向对象程序设计 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:张士洋 学号:20165308 指导教师:娄嘉鹏 ...

  2. Kubernetes 知识点

    自己总结的 Kubernetes 的各模块(待补充) 各模块包含关系: namespace => node => pod => container table th:first-of ...

  3. Golang client绑定本地IP和端口

    有时需要指定网络通信时本地使用的IP地址和端口号. 在Go语言中可通过定义 Dialer 中LocalAddr 成员实现. Dialer结构定义如下: // A Dialer contains opt ...

  4. 大数据离线分析平台 JSSDK数据收集引擎编写

    JsSDK设计规则在js sdk中我们需要收集launch.pageview.chargeRequest和eventDuration四种数据,所以我们需要在js中写入四个方法来分别收集这些数据,另外我 ...

  5. pyhanlp用户自定义词典添加实例说明

    pyhanlp用户自定义词典添加实例说明 pyhanlp是python版封装的的HanLP,项目地址:https://github.com/hankcs/pyhanlp 经过测试,HanLP比nltk ...

  6. 【java】类的初识

    面向过程思想:强调的是功能行为 面向对象思想:不自己亲自做,将功能封装为对象,强调具备功能的对象,指挥对象实现各种功能.以后开发实际就是找对象使用对象,要是对象没有就创建对象并维护对象. 面向对象的三 ...

  7. 抓包及分析(wireshark&tcpdump)

    1.简介 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工 ...

  8. Thinkphp 3.1. 3 ueditor 1.4.3 添加水印

    1.引入Ueditor  <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...

  9. debian的python蓝牙库

    sudo apt--dev pip install bluepy

  10. LeetCode——14. Longest Common Prefix

    一.题目链接:https://leetcode.com/problems/longest-common-prefix/ 二.题目大意: 给定若干个字符串,找出它们的最长公共子串. 三.题解: 这道题目 ...