android动态设置软键盘弹出模式,Android 弹出软键盘所遇到的坑及解决方法
重要代码:
//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 弹出软键盘所遇到的坑及解决方法相关推荐
- android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
之前写过一篇文章:RxBus的实现及简单使用.今天我们尝试使用RxBus动态切换主题. 一.定义主题颜色 color.xml #F44336 #D32F2F #F44336 #E91E63 #C218 ...
- android动态设置背景
最近,实现了这么一个功能,本来是将用户的登录注册.退登注销等做成了sdk,便于模块化复用. 这中间涉及到UI,公司多个项目最好是统一这方面的UI,才能实现完全复用.当然,一些小改动还是必要的,如设置状 ...
- android 动态设置padding,Android动态设置控件大小以及设定margin以及padding值
http://www.aichengxu.com/Java/73893.htm Android动态设置控件大小以及设定margin以及padding值,有需要的朋友可以参考下. 一.概述 在andro ...
- android 如何动态设置margin,Android 动态设置margin
android的view中有setPadding,但是没有直接的setMargin方法.如果要在代码中设置该怎么做呢? 可以通过设置view里面的LayoutParams 设置,而这个LayoutPa ...
- android 动态改变语言,android动态设置app当前运行语言的方法
android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言. package com.example.androidtest; import java.util.Locale ...
- Android 各版本 设置 USB 默认连接 MTP 模式 ( Android 6.0+ )
Android 各版本 设置 USB 默认连接 MTP 模式 ( Android 6.0+ ) Android 6.0 以及之后的版本,google默认设计直接配置USB连接模式为 :仅充电: 项目 ...
- Android 动态设置宽高
Android 动态设置宽高 val params: FrameLayout.LayoutParams = view?.layoutParams as FrameLayout.LayoutParams ...
- android textview layoutparams,Android动态设置布局的LayoutParams属性总遇到造型异常
Android动态设置布局的setLayoutParams()属性总遇到造型异常问题 android:id="@+id/introduce" android:layout_widt ...
- jsp对弹出jsp传值 和刷新网页后js仍然没有刷新的解决方法
jsp对弹出jsp传值 和刷新网页后js仍然没有刷新的解决方法 现在 从A.jsp弹出B.jsp,B.jsp包含B.js: 要从B.js访问到A.jsp中的变量的值: 弹出JSP的代码为: $('#m ...
最新文章
- str量化转化为int
- KS012基于SSM实现个人记账管理系统
- 编译linux系统到开发板,迅为3399开发板Linux固件编译-Ubuntu16系统编译
- 剑指-顺时针打印矩阵
- 用了这么多年的泛型,你对它到底有多了解?
- DebugView的使用[通用汇总]
- oracle餐饮权,初秋来临,献上餐饮数字化经营的“暖心大餐”
- Mysql中各种常见数据库存储引擎对比
- 解决response.setHeader(Content-disposition 中文乱码问题
- windows 8授权概览
- vulhub学习(1) ActiveMQ反序列化漏洞(CVE-2015-5254)复现
- linux格式化sd卡,并进行挂载
- airtest获取手机分辨率,通过相对坐标定位元素
- 安卓盒子launcher界面开发之添加自动定位,获取当地天气
- GWAS相关名词解释及基础知识储备[长期更新]
- Win10/11 更改电脑用户名的方法
- Dubbo Failed to check the status of the service.No provider available for the service from问题解决
- catti 三笔 计算机专业,CATTI三笔经验贴:82分实务!动物科学专业研二学生
- leetcode1306
- 通过VN1630/VN7640的I/O功能来确认电源设置电压的时间精确度