Closed kebuwei closed 8 years ago
XhsEmoticonsKeyboard监听软键盘的原理是监听可视区域高度的变化。
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
((Activity) mContext).getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
// ...
}
}
默认使用android:windowSoftInputMode="adjustResize"。 当软键盘弹出时压缩可视区域,在AutoHeightLayout中控制底层layout的onMeasure,从而实现不压缩无闪烁的效果。 adjustPan没有调整窗口的大小,在这里并不适用
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if(mConfigurationChangedFlag){
mConfigurationChangedFlag = false;
Rect r = new Rect();
((Activity) mContext).getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
if (mScreenHeight == 0) {
mScreenHeight = r.bottom;
}
int mNowh = mScreenHeight - r.bottom;
mMaxParentHeight = mNowh;
}
if (mMaxParentHeight != 0) {
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int expandSpec = MeasureSpec.makeMeasureSpec(mMaxParentHeight, heightMode);
super.onMeasure(widthMeasureSpec, expandSpec);
return;
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
回到问题 做视频类的界面,底层是播放器,不使用该属性则会压缩变形。 同样可以用该方法来保证播放器不被压缩。 或者重写AutoHeightLayout的onMeasure
大概明白了,谢谢啊,addOnGlobalLayoutListener这个监听我有留意,不使用adjustResize属性重写AutoHeightLayout的onMeasure去实现,不过具体怎么去控制我还是不太懂,先研究下,要是可以提供一些案例就最好了
请问android:windowSoftInputMode是如何解决的呢?同样在视频类界面遇到这个问题
说明:Activity中使用不使用任何android:windowSoftInputMode属性,点击编辑框弹出软键盘正常的。
Activity中使用android:windowSoftInputMode="adjustPan"属性: 问题1:点击编辑框软键盘会顶起表情面板,发现出现的步骤是:表情面板收起的时候,点击编辑框,软件盘键表情面板顶起来; 问题2:表情面板显示的时候,点击边框,软键盘正常显示,点击物理返回键,整个界面闪动。
使用android:windowSoftInputMode="adjustPan"属性原因:做视频类的界面,底层是播放器,不使用该属性则会压缩变形。