Android软键盘遮挡布局问题;
布局被软键盘遮挡虽然不是什么大问题,但还是比较影响用户体验的;最让人恼火的是当前输入框被软键盘被遮挡,来看一下解决方法;
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软键盘遮挡布局问题;的更多相关文章
- Android软键盘遮挡布局的那些事
有朋友提到软键盘遮挡布局的问题,说网上找了很多资料都未能解决,下面我来总结一下那些事,有些内容也是从网友那里学来的,但是我都会自己验证正确了才会贴出来. 首先来分析下我们常见的遮挡问题有哪些(本次所说 ...
- Android软键盘遮挡的四种解决方案
问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时输入 ...
- 关于Android软键盘把布局顶上去的问题(一)
最近接触到了一个登陆页面,布局最上面显示的是一个波纹的view,中间显示账号和密码的EditText,紧接着还有一个Button: 希望:点击EditText时,软键盘不能把波纹的view顶出去,也不 ...
- 关于Android软键盘把布局顶上去的问题
首先说下我的需求:布局最上面是一个bar,有左上角返回按钮和标题,bar下面是一个ScrollView,里面有各种TextView和EditText, 点击下面的EditText时,不希望软键盘把ba ...
- Android软键盘弹出,覆盖h5页面输入框问题
之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位 ...
- Android软键盘的隐藏显示、事件监听的代码
把开发过程中重要的一些内容片段做个珍藏,如下资料是关于Android软键盘的隐藏显示.事件监听的内容,应该是对小伙伴们有所用途. public class ResizeLayout extends L ...
- Android 软键盘弹出,界面整体上移
在做搜索功能的时候,点击搜索框,搜索框获取焦点,键盘弹出:现在问题出来了,android软键盘弹出的时候,android整个界面上移,布局被挤压,很难看:要解决这个问题,我们需要用到 windowSo ...
- Android 软键盘监听事件
Android软键盘的隐藏显示研究 Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少 ...
- 完美解决android软键盘监听
最近在做应用性能调优,发现在一个包含有输入框的Activity中,当软键盘弹出的时候,如果直接finish掉此Activity,那么在返回到上一个Activity时,界面的渲染会由于软键盘没有及时的收 ...
随机推荐
- 20165308 实验二 Java面向对象程序设计
20165308 实验二 Java面向对象程序设计 实验二 Java面向对象程序设计 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:张士洋 学号:20165308 指导教师:娄嘉鹏 ...
- Kubernetes 知识点
自己总结的 Kubernetes 的各模块(待补充) 各模块包含关系: namespace => node => pod => container table th:first-of ...
- Golang client绑定本地IP和端口
有时需要指定网络通信时本地使用的IP地址和端口号. 在Go语言中可通过定义 Dialer 中LocalAddr 成员实现. Dialer结构定义如下: // A Dialer contains opt ...
- 大数据离线分析平台 JSSDK数据收集引擎编写
JsSDK设计规则在js sdk中我们需要收集launch.pageview.chargeRequest和eventDuration四种数据,所以我们需要在js中写入四个方法来分别收集这些数据,另外我 ...
- pyhanlp用户自定义词典添加实例说明
pyhanlp用户自定义词典添加实例说明 pyhanlp是python版封装的的HanLP,项目地址:https://github.com/hankcs/pyhanlp 经过测试,HanLP比nltk ...
- 【java】类的初识
面向过程思想:强调的是功能行为 面向对象思想:不自己亲自做,将功能封装为对象,强调具备功能的对象,指挥对象实现各种功能.以后开发实际就是找对象使用对象,要是对象没有就创建对象并维护对象. 面向对象的三 ...
- 抓包及分析(wireshark&tcpdump)
1.简介 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话,我直接用tcpdump了,因为我工 ...
- Thinkphp 3.1. 3 ueditor 1.4.3 添加水印
1.引入Ueditor <!-- 实例化编辑器 --> <script type="text/javascript"> window.UEDITOR_HO ...
- debian的python蓝牙库
sudo apt--dev pip install bluepy
- LeetCode——14. Longest Common Prefix
一.题目链接:https://leetcode.com/problems/longest-common-prefix/ 二.题目大意: 给定若干个字符串,找出它们的最长公共子串. 三.题解: 这道题目 ...