Android 浮动编辑框的具体实现代码

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并做了很好的的封装,只需实现你的需求布局即可,里面也有完整的用法实例。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android清空编辑框内容功能的实现实例代码

    引言 在项目开发中你肯定会遇到这样的需求,输入到EditText中的数据一个一个清理太麻烦了,需要有一个按钮直接能实现一次删除整个EditText控件中的数据,那么接下来我就给大家封装一个方法,有这样的需求直接调用就好了.话不多说,直接上代码: /** *清空编辑框按钮 * @param editText 需要清空的EditText控件 * @param delImageView 清空数据的图片 */ protected void clearEditText(final EditText edi

  • Android EdText编辑框禁止输入表情符号(使用正则表达式)

    使用正则表达式 p s f s NOT_EMOJI = "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]" 找了好多个正则表达式,这个还是可以的 代码: 返回true代表输入了表情,否则不是表情 public static boolean isEmote(String content) { Pattern pattern = Pattern.compile(NOT_EMOJI); Match

  • Android 浮动编辑框的具体实现代码

    Android app 开发中经常会遇到一些输入框要悬浮到软键盘上方的需求,大致做法有做法如下. Android输入法软键盘悬浮,最常见的一种方法是通过给ViewTreeObserver添加ViewTreeObserver.OnGlobalLayoutListener当全局布局完成时或视图树中视图的可见性发生变化时回调onGlobalLayout方法,在onGlobalLayout方法中获取当前窗口的区域,获取区域高度如果超过屏幕的五分之一一般认为是软键盘处于显示状态,区域高度即为输入法软键盘高

  • 易语言编辑框加背景图片代码实例

    DLL代码 .版本 2 .DLL命令 CreatePatternBrush, 整数型, "gdi32", "CreatePatternBrush" .参数 hBitmap, 整数型 .DLL命令 GetWindowLong, 整数型, "user32", "GetWindowLongA" .参数 hwnd, 整数型 .参数 nIndex, 整数型 .DLL命令 SetWindowLong, 整数型, "user32&

  • javascript 网页编辑框及拖拽图片的问题

    复制代码 代码如下: function keyPress(ev){ if(ev.keyCode==13){ //在光标所在处创建一个区域. var range=document.selection.createRange(); //将区域的内容设置成为换行符. range.text="\n"; //将区域的起始点向右移动一个字符的长度. range.moveStart("character", 1); //将光标移动到区域的结尾.(若为false则是移动到起始位置)

  • 原生JavaScript实现Tooltip浮动提示框特效

    使用原生JavaScript设计和实现Tooltip浮动提示框特效,了解代码简化.事件绑定.事件冒泡等技巧和知识. 特效四个关键点: 显示:鼠标移到ToolTip超链接上时,ToolTip提示框可以显示出来 隐藏:鼠标移开时,ToolTip提示框自动隐藏 定位:ToolTip提示框的位置需要根据ToolTip超链接的位置来设置 可配置:ToolTip提示框可以根据参数不同,改变尺寸和显示内容 注意点: 1)border-radius和 box-shadow兼容写法 2)不论鼠标指针穿过被选元素或

  • Android自定义Dialog框样式

    本文实例为大家分享了Android自定义Dialog框样式的具体代码,供大家参考,具体内容如下 首先定义dialog的布局文件,buy_goods_dialog.xml如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_w

  • Android自动编辑文本框(AutoCompleteTextView)使用方法详解

    自动编辑文本框(AutoCompleteTextView)继承自EditText,能够接受用户的输入编辑,但是有这自己的特色功能:输入一定的字符以后会弹出下拉列表提示供用户选择,用户选择之后会自动填充文本框.这项功能正如浏览器的输入提示: 由于自动编辑文本框继承于EditText,它能够支持EditText的全部属性,但是在输入提示方面它有着自己的独特属性: android:completionHint     为弹出下拉菜单指定提示标题 android:completionThreshold 

  • 当编辑框内容改变 对应的单元格也随着改变vba代码

    当编辑框内容改变,对应的单元格也随着改变 复制代码 代码如下: Private Sub TextBox1_Change() ThisWorkbook.ActiveSheet.Range("J1") = TextBox1.Text End Sub 利用这个代码可以写很多自动计算的Excel小模块了

  • Android自动文本框输入识别提示功能代码

    自动提示文本框(AutoCompleteTextView)可以加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 相信大家都熟悉自动识别提示吧,在我们的生活中随处可见,今天就让我为大家简单介绍一下它是如何设计的. 所谓自动识别输入即是根据用户输入的已有信息,为用户提示可能的值,方便用户完成输入.在Android设备上这种功能分为:AutoCompleteTextView和MultiAutoCompleteTextView,前者为单个的自动识别,类似与搜索引擎的输入框提示:后者为多个值

随机推荐