当前位置: 移动技术网 > IT编程>移动开发>Android > Android 浮动编辑框的具体实现代码

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

北京货架厂,沈泳 王陟,湖南卫视跨年演唱会2017天佑

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来实现效果。

先来张效果图

效果图

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网