重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

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

之前写注册页面的时候,UI同学给我提了个意见,让弹出软键盘时候,左上角的标题“注册”不动,中间内容往上移动,效果这样
怎么让软键盘弹出时,部分控件上移
怎么让软键盘弹出时,部分控件上移
经过查阅资料和多方实践,解决方法如下

创新互联公司:从2013年开始为各行业开拓出企业自己的“网站建设”服务,为上千余家公司企业提供了专业的成都网站设计、成都网站制作、网页设计和网站推广服务, 定制网站由设计师亲自精心设计,设计的效果完全按照客户的要求,并适当的提出合理的建议,拥有的视觉效果,策划师分析客户的同行竞争对手,根据客户的实际情况给出合理的网站构架,制作客户同行业具有领先地位的。

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格式是这样的,标题我是在基类上设置加上的
怎么让软键盘弹出时,部分控件上移

    
    
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写死的,所以布局高度变了以后内容移动标题不动。

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


名称栏目:怎么让软键盘弹出时,部分控件上移
文章链接:http://cqcxhl.com/article/jcepcs.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP