这里采用滚动布局来解决输入法遮盖布局的问题,方法如下:

/**

* @param root 最外层布局,需要调整的布局

* @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部

*/

private void controlKeyboardLayout(final View root, final View scrollToView) {

root.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

Rect rect = new Rect();

//获取root在窗体的可视区域

root.getWindowVisibleDisplayFrame(rect);

//获取root在窗体的不可视区域高度(被其他View遮挡的区域高度)

int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;

//若不可视区域高度大于100,则键盘显示

if (rootInvisibleHeight > 100) {

int[] location = new int[2];

//获取scrollToView在窗体的坐标

scrollToView.getLocationInWindow(location);

//计算root滚动高度,使scrollToView在可见区域的底部

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

root.scrollTo(0, srollHeight);

} else {

//键盘隐藏

root.scrollTo(0, 0);

}

}

});

}

效果图如下:

下面提供完整的代码及布局文件:

1. MainActivity

public class MainActivity extends Activity {

private LinearLayout mRoot;

private Button mSubmit;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mRoot = (LinearLayout) findViewById(R.id.root);

mSubmit = (Button) findViewById(R.id.submit);

controlKeyboardLayout(mRoot, mSubmit);

}

/**

* @param root 最外层布局,需要调整的布局

* @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部

*/

private void controlKeyboardLayout(final View root, final View scrollToView) {

root.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

Rect rect = new Rect();

//获取root在窗体的可视区域

root.getWindowVisibleDisplayFrame(rect);

//获取root在窗体的不可视区域高度(被其他View遮挡的区域高度)

int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;

//若不可视区域高度大于100,则键盘显示

if (rootInvisibleHeight > 100) {

int[] location = new int[2];

//获取scrollToView在窗体的坐标

scrollToView.getLocationInWindow(location);

//计算root滚动高度,使scrollToView在可见区域

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

root.scrollTo(0, srollHeight);

} else {

//键盘隐藏

root.scrollTo(0, 0);

}

}

});

}

}

2. activity_main.xml

android:id="@+id/root"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:gravity="center_vertical" >

android:layout_height="50dip"

android:hint="edit1"/>

android:layout_height="50dip"

android:hint="edit2"/>

android:layout_height="50dip"

android:hint="edit3"/>

android:layout_width="fill_parent"

android:layout_height="50dip"

android:text="submit"/>

android显示输入法键盘布局,android 解决输入法键盘遮盖布局问题相关推荐

  1. android 虚拟按键遮挡布局,完美解决虚拟按键遮盖底部视图的问题

    Android部分手机会有虚拟按键,而没有实体按键,例如华为系列的手机. 然而在开发过程中,有时候会涉及底部视图的开发,最终的结果却因为虚拟按键的关系,结果底部视图被虚拟按键给遮盖住了. 在这里,分为 ...

  2. HCL打开显示当前系统用户怎么解决_Mac键盘突然停止响应怎么办?

    一些MAC用户在生活工作中有时会发现自己的键盘会突然停止响应,但是鼠标却不受影响,但又不知道哪里出了问题,不用担心,小编今天给大家分享一下具体的解决方法哦,希望对您有所帮助~ 一旦出现键盘停止响应的情 ...

  3. android 显示天气插件下载,Android天气插件

    Android天气插件 天气插件Android SDK,包括实况天气.空气质量.灾害预警.生活指数等天气内容,支持在Android应用任意位置加入天气内容,并可生成天气频道页面. 下载 # 适配版本 ...

  4. android显示二维毫秒,Android 悬浮窗显示毫秒级时间

    Android 悬浮窗显示毫秒级时间Android 悬浮窗显示毫秒级时间. 运行效果如下: 1.新建工程"FloatWindowDemo2", 工程如下: 2. "Mai ...

  5. android显示二维毫秒,Android应用开发Android 悬浮窗显示毫秒级时间

    本文将带你了解Android应用开发Android 悬浮窗显示毫秒级时间,希望本文对大家学Android有所帮助. Android   悬浮窗显示毫秒级时间Android 悬浮窗显示毫秒级时间. 运行 ...

  6. Android显示日历的函数,android实现双日期选择控件(可隐藏日,只显示年月)

    在安卓开发中,会碰到选开始日期和结束日期的问题.特别是在使用Pad时,如果弹出一个Dialog,能够同时选择开始日期和结束日期,那将是极好的.我在开发中在DatePickerDialog的基础上做了修 ...

  7. android显示网络图片控件,Android控件之ImageView(二)

    前言 在上一篇文章中,我们讲解了如何加载本地图片,那么在实际项目中 ImageView 大多数使用场景是加载网络图片,网络图片其实就是存储在服务器上的文件,我们需要从服务器获取到文件的二进制输入流 I ...

  8. android显示矩阵大小,关于android:显示代表灰度图像的双值矩阵

    我的问题是:我有一个字节数组,必须与ImageView一起显示. 这是我的代码: @Override protected void onCreate(Bundle savedInstanceState ...

  9. android显示通知图标大全,Android推送通知:图标未显示在通知中,而是显示白色方块...

    Android推送通知:图标未显示在通知中,而是显示白色方块 我的应用会生成通知,但我没有显示为该通知设置的图标.相反,我得到一个白色方块. 我已经尝试调整图标的大小(尺寸720x720,66x66, ...

  10. android 显示进度,progressdialog-如何在Android中显示进度对话框?

    progressdialog-如何在Android中显示进度对话框? 当我单击"登录"按钮时,我想显示ProgressDialog,这需要时间才能移动到另一个页面. 我怎样才能做到 ...

最新文章

  1. linux C语言 socket编程教程(附两个例子)(socket教程)
  2. go语言判断手机号归属地
  3. jdk8读取文件_用于从文件读取/写入文件的新JDK 11文件方法
  4. Python里面search()和match()的区别?
  5. gnu java_【Java学习笔记】修饰符
  6. 鼠标指向表格时 显示更多信息 toolTipController1
  7. C++之异常捕获和处理
  8. 计算机技术运用家具,计算机技术在家具企业中的应用与控制管理
  9. 自适应中值滤波器(基于OpenCV实现)
  10. 最后一波机会!!本周你最不能错过的互联网大会,VIP门票0元限时抢!
  11. 黑月教主工具脱水印_PS三种去水印方法简单粗暴!看完你就学会!
  12. AIX虚拟内存管理机制(转)
  13. Stata:各类集中度指数估算-广义基尼Gini系数
  14. vue组件,父传子、子传父、父调子、子调父简单理解总结
  15. VR 终极选购指南:入门、进阶与高端
  16. AutoJs超神级代码分享大更新
  17. Serenity Screenplay pom.xml文件配置
  18. 洛谷 CF7E Defining Macros 题解
  19. android 多线程创建texture,从源码角度剖析Android系统EGL及GL线程
  20. 《专业主义》-书摘(下)

热门文章

  1. 云端服务器(linux版)部署mysql
  2. Seq2Seq and NMT(基于cs224n的最全综述神经机器翻译技术)
  3. java if经典程序_java经典程序题15道(另附自己做的答案)
  4. 某资讯App signature签名分析 (一)
  5. CF 1368G Shifting Dominoes
  6. 什么都会,也许只是盲目跟风,和优秀无关
  7. 为什么顺丰快递就要比别的快递快,别的快递难道做不到吗?
  8. 验证sqlserver 2000 sp4补丁是否安装成功(安装补丁后可以远程访问)
  9. 简述Android手机常用的设备ID
  10. 用“法外狂徒”理解C++中的引用