如何在键盘动态添加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);
“`