实际现象: 详见 >> bg01
技术反馈: 暂时无法解决,如需要解决得改变现有聊天界面框架
产品回应: 产品不能接受此方案,此问题需优化好
着手排查:
P2PChatActivityV2
AndroidManifest.xml
添加android:windowSoftInputMode="adjustPan"
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_chat"/>
ScrollView
后代码如下<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_chat"/>
</ScrollView>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@drawable/bg_chat"/>
</ScrollView>
技术方案:
FrameLayout
实现<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imgv_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_chat"/>
</FrameLayout>
view.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
new Handler().post(new Runnable() {
public void run() {
if(!isGetBgHeight){
isGetBgHeight = true;
int height = rlyt_chat.getHeight();
imgv_background.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,height));
}
}
});
}
};
流程回顾:发现此 Bug >> 提交 Bug >> 技术反映暂不修复 >> 产品也发现此 Bug >> 产品反馈 >> 测试回复暂不处理 >> 产品不能接受 >> 着手排查问题 >> 问题得到最大改善 >> 技术眼前一亮(你是怎么做到的)>> 推进技术再次修复 >> 技术查看相关资料(微信/ScrollView 源码)>> 尝试修复 >> 修复成功 >> 测试通过 >> 产品满意 >> Over
经验分享:
个人见解:
ImageView
具备android:scrollbars=xxx
属性,但是不配合ScrollView
使用,还是被压缩了ScrollView
方向探索修复问题原理:
ScrollView
继承自FrameLayout
布局public class ScrollView extends FrameLayout
FrameLayout
布局属于层级关系,适合背景图场景,且查看微信布局,皆是该布局FrameLayout
布局同宽高的布局可见高度(或其本身高度,这里没给帧布局加 id,所以获取其同级宽高布局的高度),更新背景图的现有高度,从而达到不被压缩的效果相关截图:
bg01 >> 背景被压缩
bg02 >> 键盘弹起时背景图显示正常,但是标题栏及输入框有异常
bg03 >> 键盘弹起,背景图显示正常
bg04 >> 键盘收起,背景图显示不全
bg05 >> 键盘收起,背景图上下边距太窄
bg06 >> 键盘收起,背景图正常显示
bg07 >> 键盘弹起,背景图显示正常
bg08 >> 键盘收起,背景图显示正常