重要代码:

//1、此layout作为最外层的layout;

//2、设置需要调整的view: setAdjustView(View view);

//3、如果需要控制输入框的显示与隐藏,可以实现OnInputViewVisibleListener接口;

public class SoftInputAdjustLayout extends RelativeLayout {

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

private View adjustView;

public SoftInputAdjustLayout(Context context) {

this(context,null);

}

public SoftInputAdjustLayout(Context context,AttributeSet attrs) {

this(context,attrs,0);

}

public SoftInputAdjustLayout(Context context,AttributeSet attrs,int defStyleAttr) {

super(context,defStyleAttr);

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

@Override

public void onGlobalLayout() {

try {

Rect r = new Rect();

getWindowVisibleDisplayFrame(r);

int heightDiff = getRootView().getHeight() - (r.bottom - r.top);

if (heightDiff > 100) {

if (onInputViewVisibleListener != null) {

onInputViewVisibleListener.onShowInputView();

}

} else {

if (onInputViewVisibleListener != null) {

onInputViewVisibleListener.onHideInputView();

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* 需要调整的view

*

* @param adjustView

*/

public void setAdjustView(View adjustView) {

this.adjustView = adjustView;

}

@Override

protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

if (adjustView != null) {

Rect rect = new Rect();

getWindowVisibleDisplayFrame(rect);

int totalHeight = getHeight();

int nowHeight = rect.bottom - rect.top;

int keyBoardHeight = totalHeight - nowHeight;

if (keyBoardHeight > totalHeight / 4) {

super.onMeasure(widthMeasureSpec,MeasureSpec.makeMeasureSpec(totalHeight,MeasureSpec.EXACTLY));

LayoutParams params = (LayoutParams) adjustView.getLayoutParams();

params.bottomMargin = keyBoardHeight;

} else {

super.onMeasure(widthMeasureSpec,heightMeasureSpec);

LayoutParams params = (LayoutParams) adjustView.getLayoutParams();

params.bottomMargin = 0;

}

} else {

super.onMeasure(widthMeasureSpec,heightMeasureSpec);

}

}

private OnInputViewVisibleListener onInputViewVisibleListener;

public void setOnInputViewVisibleListener(OnInputViewVisibleListener listener) {

onInputViewVisibleListener = listener;

}

public interface OnInputViewVisibleListener {

void onShowInputView();

void onHideInputView();

}

}

备注:

全屏模式:

1、通过style或者setFlags(…)来设置全屏;

2、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;

3、此layout必须作为布局的最外层layout;

4、一定要在布局中添加一个view,如下:

android:layout_width="0px"

android:layout_height="0px"

android:focusable="true"

android:focusableInTouchMode="true" />

5、通过setAdjustView(View view)来设置需要调整的view;

6、在全屏模式下,输入框开始是未显示的,直到弹出软键盘,才会显示输入框。因为如果输入框一开始就显示,那软键盘就会根据输入框来弹出,且输入框在底部,那就可能造成把整个view顶上去。所以这时我们应该实现OnInputViewVisibleListener这个接口来控制输入框的显示与隐藏。

非全屏模式

1、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;

2、此layout必须作为布局的最外层layout;

3、通过setAdjustView(View view)来设置需要调整的view;

4、如果需要控制输入框的显示与隐藏,就实现OnInputViewVisibleListener这个接口。

以上所述是小编给大家介绍的Android 弹出软键盘所遇到的坑及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

android动态设置软键盘弹出模式,Android 弹出软键盘所遇到的坑及解决方法相关推荐

  1. android动态改变菜单栏,Android动态设置主题(使用RxBus模式)

    之前写过一篇文章:RxBus的实现及简单使用.今天我们尝试使用RxBus动态切换主题. 一.定义主题颜色 color.xml #F44336 #D32F2F #F44336 #E91E63 #C218 ...

  2. android动态设置背景

    最近,实现了这么一个功能,本来是将用户的登录注册.退登注销等做成了sdk,便于模块化复用. 这中间涉及到UI,公司多个项目最好是统一这方面的UI,才能实现完全复用.当然,一些小改动还是必要的,如设置状 ...

  3. android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值

    http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...

  4. android 如何动态设置margin,Android 动态设置margin

    android的view中有setPadding,但是没有直接的setMargin方法.如果要在代码中设置该怎么做呢? 可以通过设置view里面的LayoutParams 设置,而这个LayoutPa ...

  5. android 动态改变语言,android动态设置app当前运行语言的方法

    android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言. package com.example.androidtest; import java.util.Locale ...

  6. Android 各版本 设置 USB 默认连接 MTP 模式 ( Android 6.0+ )

    Android 各版本 设置 USB 默认连接 MTP 模式 ( Android  6.0+ ) Android 6.0 以及之后的版本,google默认设计直接配置USB连接模式为 :仅充电: 项目 ...

  7. Android 动态设置宽高

    Android 动态设置宽高 val params: FrameLayout.LayoutParams = view?.layoutParams as FrameLayout.LayoutParams ...

  8. android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常

    Android动态设置布局的setLayoutParams()属性总遇到造型异常问题 android:id="@+id/introduce" android:layout_widt ...

  9. jsp对弹出jsp传值 和刷新网页后js仍然没有刷新的解决方法

    jsp对弹出jsp传值 和刷新网页后js仍然没有刷新的解决方法 现在 从A.jsp弹出B.jsp,B.jsp包含B.js: 要从B.js访问到A.jsp中的变量的值: 弹出JSP的代码为: $('#m ...

最新文章

  1. str量化转化为int
  2. KS012基于SSM实现个人记账管理系统
  3. 编译linux系统到开发板,迅为3399开发板Linux固件编译-Ubuntu16系统编译
  4. 剑指-顺时针打印矩阵
  5. 用了这么多年的泛型,你对它到底有多了解?
  6. DebugView的使用[通用汇总]
  7. oracle餐饮权,初秋来临,献上餐饮数字化经营的“暖心大餐”
  8. Mysql中各种常见数据库存储引擎对比
  9. 解决response.setHeader(Content-disposition 中文乱码问题
  10. windows 8授权概览
  11. vulhub学习(1) ActiveMQ反序列化漏洞(CVE-2015-5254)复现
  12. linux格式化sd卡,并进行挂载
  13. airtest获取手机分辨率,通过相对坐标定位元素
  14. 安卓盒子launcher界面开发之添加自动定位,获取当地天气
  15. GWAS相关名词解释及基础知识储备[长期更新]
  16. Win10/11 更改电脑用户名的方法
  17. Dubbo Failed to check the status of the service.No provider available for the service from问题解决
  18. catti 三笔 计算机专业,CATTI三笔经验贴:82分实务!动物科学专业研二学生
  19. leetcode1306
  20. 通过VN1630/VN7640的I/O功能来确认电源设置电压的时间精确度

热门文章

  1. 电子行业应如何实施数字工厂管理系统
  2. 电脑只有飞行模式,没有WiFi(多种有效解决方式)
  3. WV.43-乘法口诀表
  4. 个人记录——前后端api对接的一种方式
  5. 通过设置静态路由实现内外网正常使用
  6. 十年无爆款,音频平台的困境
  7. 分布式事务框架_1024开源首发 | 金融级分布式事务框架 TXLE
  8. 圆桌游戏(区间DP)
  9. 湖科大教学匠计网微课堂思维导图
  10. 西雅图不相信爱情,66岁比尔盖茨离婚!财产分割成焦点