时间:2021-05-21
Android app 开发中经常会遇到一些输入框要悬浮到软键盘上方的需求,大致做法有做法如下。
Android输入法软键盘悬浮,最常见的一种方法是通过给ViewTreeObserver添加ViewTreeObserver.OnGlobalLayoutListener当全局布局完成时或视图树中视图的可见性发生变化时回调onGlobalLayout方法,在onGlobalLayout方法中获取当前窗口的区域,获取区域高度如果超过屏幕的五分之一一般认为是软键盘处于显示状态,区域高度即为输入法软键盘高度,通过此高度动态调整view的高度,达到输入框悬浮于软键盘上方的效果,代码如下:
ViewTreeObserver.OnGlobalLayoutListener layoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { int mScreenHeight = 0; int mKeyboardHeight = 0; @Override public void onGlobalLayout() { Rect rect = new Rect(); // 测量当前窗口的显示区域 ((Activity)getContext()).getWindow().getDecorView() .getWindowVisibleDisplayFrame(rect); if(mScreenHeight <= 0){ mScreenHeight = ((WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay().getHeight(); } //计算出软键盘的高度 int keyboardHeight = mScreenHeight - rect.bottom; //如果keyboardHeight大于屏幕的五分之一, // 此时keyboardHeight有效,反之就是软键盘已经关闭了。 if (Math.abs(keyboardHeight) > mScreenHeight / 5) { mKeyboardHeight = keyboardHeight; } } }还有一种方式是给Activity设置 Android:windowSoftInputMode="stateVisible|adjustResize",但是这种方法不是很灵活,一般解决不了产品的需求。
<activity android:name=".activity.xxx"Android:windowSoftInputMode="stateVisible|adjustResize"/>本文重点介绍通过透明的Activity来实现效果。
先来张效果图
效果图
全部源码已上传到github 点击查看,别忘了star哦
1.自定义一个activity theme
<style name="NoTitleDialogTheme" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowCloseOnTouchOutside">false</item> </style>2.在AndroidManifest.xml中设置
<activity android:name=".FloatEditorActivity" android:windowSoftInputMode="stateAlwaysVisible" android:theme="@style/NoTitleDialogTheme"/>3.在Activity中调整window的重力方向
public class FloatEditorActivity extends Activity implements View.OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.id.editorlayout); getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); getWindow().setGravity(Gravity.BOTTOM); }}就这样非常简单的实现了浮动编辑框的效果,全部源码已上传到github并做了很好的的封装,只需实现你的需求布局即可,里面也有完整的用法实例。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了MFC实现对话框编辑控件上拖拽文件的具体代码,供大家参考,具体内容如下步骤1、重载CEdit类2、添加编辑框控件首先,重载CEdit类,定义
前言Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入一些非法字符
本文实例讲述了jQuery实现的登录浮动框效果代码。分享给大家供大家参考。具体如下:这是一款jQuery登录浮动框代码,点击登录按钮后可看到弹出了一个浮动层,右
获取任意键的键代码.版本2.程序集窗口程序集1.子程序_键代码编辑框_按下某键,逻辑型.参数键代码,整数型.参数功能键状态,整数型键代码编辑框.内容=到文本(键
本文实例为大家分享了Android实现图片浮动拖拽效果的具体代码,供大家参考,具体内容如下实现步骤1.先自定义一个浮动工具类publicclassMoveIma