在键盘上动态添加View

如何在键盘动态添加View呢?Android手机中的键盘有很多,因此不可能一一匹配在键盘所在的Window上添加,所以需要在键盘上方的容器中添加View,这个时候只需要动态获取键盘的高,作监听,就可以在上方容器中动态添加View啦。
以下提供对键盘的监听的方法。这里只提供解决方案,不提供详细讲解,具体API的使用可参考文档。
效果如下图
这里写图片描述

public class KeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener
{
    private static final String TAG = "KeyboardChangeListener ";

    private View mContentView;

    private int mOriginHeight;

    private int mPreHeight;

    private KeyBoardListener mKeyBoardListenr;

    public interface KeyBoardListener
    {
        /**
         * call back
         *
         * @param isShow true is show else hidden
         * @param keyboardHeight keyboard height
         */
        void onKeyboardChange(boolean isShow, int keyboardHeight);
    }

    public void setKeyBoardListener(KeyBoardListener keyBoardListen)
    {
        this.mKeyBoardListenr = keyBoardListenr;
    }

    public KeyboardChangeListener(Activity contextObj)
    {
        if (contextObj == null)
        {
            return;
        }
        mContentView = findContentView(contextObj);
        if (mContentView != null)
        {
            addContentTreeObserver();
        }
    }

    private View findContentView(Activity contextObj)
    {
        return contextObj.findViewById(android.R.id.content);
    }

    private void addContentTreeObserver()
    {
        mContentView.getViewTreeObserver().addOnGlobalLayoutListener(this);
    }

    @Override
    public void onGlobalLayout()
    {
        int currHeight = mContentView.getHeight();
        if (currHeight == 0)
        {
            return;
        }
        boolean hasChange = false;
        if (mPreHeight == 0)
        {
            mPreHeight = currHeight;
            mOriginHeight = currHeight;
        }
        else
        {
            if (mPreHeight != currHeight)
            {
                hasChange = true;
                mPreHeight = currHeight;
            }
            else
            {
                hasChange = false;
            }
        }
        if (hasChange)
        {
            boolean isShow;
            int keyboardHeight = 0;
            if (mOriginHeight == currHeight)
            {
                // hidden
                isShow = false;
            }
            else
            {
                // show
                keyboardHeight = mOriginHeight - currHeight;
                isShow = true;
            }

            if (mKeyBoardListen != null)
            {
                mKeyBoardListenr.onKeyboardChange(isShow, keyboardHeight);
            }
        }
    }
}

监听写出来了,具体怎么用呢?那好吧,我也贴出来以供参考啦

 KeyboardChangeListener softKeyboardStateHelper = new KeyboardChangeListener(this);
 softKeyboardStateHelper.setKeyBoardListener(new KeyboardChangeListener.KeyBoardListener()
        {
            @Override
            public void onKeyboardChange(boolean isShow, int keyboardHeight)
            {
                if (isShow)
                {
                    // 键盘的弹出 添加View
                    showViewOverKeyBoard(keyboardHeight);
                }
                else
                {
                    // 键盘的收起 使之消失
                    dismissVoiceView();
                }

            }
        });
ViewOnKeyboard mView = new ViewOnKeyboard(this);
//这里我键盘上部分布局是RelativeLayout,故采用
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);

params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);            

mContentLayout.addView(mView ,params);

“`

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值