最近在项目中遇到使用ReletiveLayout将View固定在底部,但弹出输入框时底部的View被顶上去的问题, 尝试了很多解决办法 ,如下:

方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

方法二:在项目的AndroidManifest.xml文件中界面对应的里加入android:windowSoftInputMode="stateVisible|adjustResize",这样会让屏幕整体上移。如果加上的是

android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。

方法三:把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView的封装。这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。

方法四:更换根布局

方法五:在根布局下加上fitsSystemwindows = true

尝试后发现:

方法一无效(ReletiveLayout下设置属性无效)

方法二无效(ReletiveLayout下设置属性无效)

方法三有效,但不适合 (布局没有超过屏幕,使用ScroollView使得View都挨在一起,只能通过magin值控制距离,不准确)

方法四无效

方法五无效

试过这么多都没用,真没办法了,最后只能监听软键盘的显示和隐藏来控制 底部布局的显隐,这样可以解决问题,不过有点闪动,问题不是很大。

照搬的代码,监听代码如下 :

public class KeyboardStateObserver {

private static final String TAG = KeyboardStateObserver.class.getSimpleName();

public static KeyboardStateObserver getKeyboardStateObserver(Activity activity) {

return new KeyboardStateObserver(activity);

}

private View mChildOfContent;

private int usableHeightPrevious;

private OnKeyboardVisibilityListener listener;

public void setKeyboardVisibilityListener(OnKeyboardVisibilityListener listener) {

this.listener = listener;

}

private KeyboardStateObserver(Activity activity) {

FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);

mChildOfContent = content.getChildAt(0);

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

public void onGlobalLayout() {

possiblyResizeChildOfContent();

}

});

}

private void possiblyResizeChildOfContent() {

int usableHeightNow = computeUsableHeight();

if (usableHeightNow != usableHeightPrevious) {

int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();

int heightDifference = usableHeightSansKeyboard - usableHeightNow;

if (heightDifference > (usableHeightSansKeyboard / 4)) {

if (listener != null) {

listener.onKeyboardShow();

}

} else {

if (listener != null) {

listener.onKeyboardHide();

}

}

usableHeightPrevious = usableHeightNow;

Log.d(TAG,"usableHeightNow: " + usableHeightNow + " | usableHeightSansKeyboard:" + usableHeightSansKeyboard + " | heightDifference:" + heightDifference);

}

}

private int computeUsableHeight() {

Rect r = new Rect();

mChildOfContent.getWindowVisibleDisplayFrame(r);

Log.d(TAG,"rec bottom>" + r.bottom + " | rec top>" + r.top);

return (r.bottom - r.top);// 全屏模式下: return r.bottom

}

public interface OnKeyboardVisibilityListener {

void onKeyboardShow();

void onKeyboardHide();

}

}

在界面中使用:

KeyboardStateObserver.getKeyboardStateObserver(this).

setKeyboardVisibilityListener(new KeyboardStateObserver.OnKeyboardVisibilityListener() {

@Override

public void onKeyboardShow() {

Toast.makeText(MainActivity.this,"键盘弹出",Toast.LENGTH_SHORT).show();

}

@Override

public void onKeyboardHide() {

Toast.makeText(MainActivity.this,"键盘收回",Toast.LENGTH_SHORT).show();

}

});

android输入法把底部顶起来,Android 输入法将底部布局顶上去遮挡布局问题相关推荐

  1. Android 软键盘弹出时把原来布局顶上去的解决方法

    Android 软键盘弹出时把原来布局顶上去的解决方法 参考文章: (1)Android 软键盘弹出时把原来布局顶上去的解决方法 (2)https://www.cnblogs.com/Joanna-Y ...

  2. Android输入法弹出时把布局顶上去和登录按钮顶上去的解决方法

    背景:在写登录界面时,老板就觉得在输入密码的时候谈出来的输入法软键盘把登录按钮遮挡住了(入下图所示,不爽),连输入框都被挡了一半,于是不满意了,要叫我改,于是我看QQ的登录效果,我就去研究了一下,弹出 ...

  3. Android之底部Dialog里面放EditText点击布局顶上去效果

    1.需求 在底部Dialog里面放EditText点击,布局需要顶上去,不顶上去很烦. 2.Dialog里面关键样式属性 <item name="android:windowFulls ...

  4. Android EditView 软键盘把布局顶上去的处理方法

    看到自己的项目的处理方法是,在AndroidManifest 的,使用到的Activity 里面添加 android:windowSoftInputMode="stateVisible|ad ...

  5. windowfullscreen后键盘布局顶上去_手机输入法的派别之争,九宫格和全键盘究竟哪种更科学?...

    有人的地方,就有江湖.而在手机输入法的江湖里,也分为两个派别.一个是九宫格输入法,另一个则是全键盘输入法. 该问题的敏感程度,完全不亚于"咸甜豆腐脑"之争. 用惯了九宫格的,无法理 ...

  6. android标题栏不被顶上去,Android仿微信QQ聊天顶起输入法不顶起标题栏的问题

    在这记录一下输入法弹出的一系列问题,有的输入法弹出就把整个布局弹上去,有的输入法弹出布局不会有变化,有的输入法弹出遮盖输入框等等问题,网上也有很多说加着加那的,但是看一下都不是很完整,解决不了所有问题 ...

  7. android软键盘把布局顶上去,Android 软键盘弹出时把原来布局顶上去的解决方法

    键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: android:name=".filing.MainActivit ...

  8. android软键盘顶部定义布局,Android 软键盘弹出时把原来布局顶上去的解决方法

    键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: android:name=".filing.MainActivit ...

  9. Android软键盘弹出时,覆盖布局,不是把布局顶上去的解决方法

    方法一: 在你的activity中的oncreate中setContentView之前写上这个代码 getWindow().setSoftInputMode(WindowManager.LayoutP ...

最新文章

  1. 这个笑脸胡子的表情是什么:“<:] {%>”?
  2. golang 关闭制定名称的 tomcat_Tomcat原理详解及请求过程
  3. python视频教程从入门到精通全集-python从入门到精通视频(全60集)免费高速下载...
  4. 利用Quartus设计4位同步二进制加法计数器
  5. 有关手游设计ICON的几点建议
  6. websocket中发生数据丢失_什么是WebSocket,它与HTTP有何不同?
  7. 写论文的一点经验小记
  8. RN对接京东支付sdk(Android)
  9. Excel怎么将两个表格数据合并为一个
  10. 高德api只显示省级地图
  11. 调整report_timing输出格式
  12. nginx配置反向代理
  13. 癫痫的神经行为和临床共病:白质网络中断/损伤的作用
  14. 三星苹果还能笑多久?联想挑战智能手机全球霸主
  15. 【iOS】高德地图SDK的详细使用
  16. 密评|商用密码应用安全性评估
  17. 页面从后台接口获取数据流显示照片
  18. 网页中,M3U8格式的视频下载
  19. matlab获取晶粒边界,晶粒边界
  20. C++中容器的分类以及相关用法

热门文章

  1. win7原版映像中添加usb3.0驱动
  2. 题目描述请参照本章例题,编写一个程序,输出以下信息:************************** Very Good**********************
  3. android app 的后台代码,包括后台的Android美食APP项目开源代码
  4. IT女上班标准装备图
  5. 简师网:公务员这些知识点需要背诵!
  6. 下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换
  7. C/C++黑魔法-编译期运行的sizeof
  8. PowerShell 读取性能计数器二进制文件(.blg)记录并汇总计算
  9. 2021(接近2022)linux(ubuntu16.04)安装cuda跑深度学习步骤以及踩坑过程(ELF标头无效、导入torch后torch.cuda.is_available()为False等等)
  10. 落叶几度夕阳红,门掩深林中