怎么让软键盘弹出时,部分控件上移

之前写注册页面的时候,UI同学给我提了个意见,让弹出软键盘时候,左上角的标题“注册”不动,中间内容往上移动,效果这样


经过查阅资料和多方实践,解决方法如下

1、先要设置页面软键盘模式,这样每次软键盘弹出后布局高度会减少软键盘的高度

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
                | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

2、找出内容view,在每次布局为软键盘弹出减小高度时监听,改变内容view

mVContent = findViewById(android.R.id.content);

ViewTreeObserver.OnGlobalLayoutListener mLsnrLayout =
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout () {

                    Rect rect = new Rect();
                    mVContent.getWindowVisibleDisplayFrame(rect);
                    int height = rect.height();

                    boolean isImmShow = height < UcApp.sHeightPx;
                    if ( isImmShow != mIsImmShow ) {
                        mIsImmShow = isImmShow;

                        mUbtnCommit.setVisibility(isImmShow ? View.INVISIBLE : View.VISIBLE);
                    }
                }
            };

mVContent.getViewTreeObserver().addOnGlobalLayoutListener(mLsnrLayout);

XML格式是这样的,标题我是在基类上设置加上的

    <!--注册布局-->
    <android.support.constraint.ConstraintLayout
        android:id="@+id/cl_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:visibility="visible">
public void setTitle (String txt) {

    if ( null == mTvTitle ) {

        mTvTitle = new TextView(UcApp.sCtx);
        ((FrameLayout) getWindow().getDecorView()).addView(mTvTitle);
        ViewUtils.inst(mTvTitle)
                .setMargins(119, 54, 0, 0)
                .setTextSize(42);
        mTvTitle.setTypeface(Typeface.DEFAULT_BOLD);
        mTvTitle.setTextColor(ComUtils.getClr(R.color.white_f2f2f2_60));
    }

    mTvTitle.setText(txt);
}

就是设置了margin

因为内容布局是竖直居中的,标题是margin写死的,所以布局高度变了以后内容移动标题不动。

希望这篇文章能帮助大家,大佬勿喷~

原文地址:https://blog.51cto.com/14311106/2392521

时间: 2024-10-13 22:25:25

怎么让软键盘弹出时,部分控件上移的相关文章

移动端 软键盘 弹出时 影响布局

移动端 软键盘 弹出时 会影响布局 1)前段时间作的移动端页面,因为高度只有1页所以用了height:100%;width:100%; ios下点击输入框弹出软键盘时,布局没有大影响. 当输入框可能被软键盘压到时,在一部分安卓下却出了问题,华为自带浏览器和UC会有布局上的问题. 原因可能是因为,软键盘弹出时,改变了height,使height:100%,不能达到原来的高度. 解决办法: $(document).ready(function () { $('body').height($('bod

Android软键盘弹出时布局问题

最近项目需要做一个类似聊天室的模块,基于Socket实现的,这部分稍后一段时间再做总结,功能上的相关点都实现了小例子也做出来了,最后发现一个比较腻歪的问题就是软键盘弹出时总是会把标题“挤出”屏幕,(无论标题是写在布局中还是仿照theme的方式添加到style中),输入时有失观赏如下图:      隐隐感觉之前项目一直有类似问题,只不过一般只在登陆界面,无伤大雅,用户输入后一掠而过,可以忽略,但这个页面这么处理确实不太美观. 查了下此类问题大致两种思路解决:         一.调整布局在底层使用

Android 软键盘弹出时布局内指定内容上移实现及问题解决

Android SDK目前提供的软键盘弹出模式接口只有两种: 一是弹出时自动回冲界面,将所有元素上顶, 一种则是不重绘界面,直接将控件元素遮住,   没有其他模式,如果想实现其他效果,光使用系统接口是不行的.   解决方法:   第一步:给想要被顶上去的内容嵌套一个 ScrollView :   <ScrollView     android:layout_width="match_parent"     android:layout_height="0dp"

Android软键盘弹出时把布局顶上去的解决方法

原文: 解决Andriod软键盘出现把原来的布局给顶上去的方法(转) 链接:http://blog.sina.com.cn/s/blog_9564cb6e0101g2eb.html 决方法,在mainfest.xml中,对那个Activity加: <activityandroid:name=".activity.HomeActivity"android:windowSoftInputMode="adjustPan|stateHidden"></ac

Mui WebApp页面 绝对定位 软键盘弹出时顶起底部按钮问题

做WebApp页面时,有时候,按钮可能会放到页面的最底下,这个时候可能会用到绝对定位(position: absolute),但是,当input 输入框被点击时,弹出的软键盘会顶起底部的按钮,就像这样: 这个时候,可以给 底下的 Button 或者包含这个Button的Div  添加一个CSS样式:z-index: -1

模仿登录界面软键盘弹出时不覆盖下面的登陆按钮的的效果

activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_pare

android软键盘弹出引起的各种不适终极解决方案

很多写登录界面的开发者都会遇到一个问题:那就是在登录界面时,当你点击输入框时,下边的按钮有时会被输入框挡住,这个不利于用户的体验,所以很多人希望软键盘弹出时,也能把按钮挤上去.很多开发者想要监听键盘的状态,这无疑是一个很麻烦的做法. 我们可以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点

关于软键盘弹出的问题

最近在做一个项目,大部分页面由fragment实现,需要发帖功能,在界面上部分为EditText,右下有一个发送按钮,下面总结一下遇到的问题: 没有进行软键盘弹出和EditText获取焦点配置时,跳转到发帖页面,EditText自动获取焦点,软键盘弹出,但偶而出现弹出的软键盘覆盖发送按钮的情况 解决方法是通过设置manifest文件中activity属性如下,确保软键盘弹出时为挤压上面显示,而不是覆盖 <activity android:name=".ui.activity.MainAct

Android软键盘弹出,覆盖h5页面输入框问题

之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家: 系统:Android 条件:当输入框在可视区底部或者偏下的位置 触发条件:输入框获取焦点,弹出软键盘 表现:软键盘 覆盖 h5页面中的输入框 问题分析: 1.发现问题:当前页面中box为flex布局,内容为上下固定高,中间自适应(中间区域内容过多会出现滚动条,input框在wrapper的底部),input获取焦点,手机键盘弹出,input未上移到可视区内,