问题描述
前段时间在忙工作室的招新app的时候遇到了一种难缠的情况,描述一下出问题的布局:
<RelativeLayout ...>
<ImageView.../> <!--这三个控件可以可以看成一个toolbar-->
<ImageView.../> <!--工作室的图案,名称之类的,需要一直保持在这个位置-->
<TextView.../>
<ScrollView> <!--ScrollView在上面上个控件之下-->
<Edittext.../> <!--接下来是好几个Edittext,多到必须用ScrollView滑动才能看完-->
<Edittext.../>
<Edittext.../>
<Edittext.../>
</ScrollView>
</RelativeLayout>
需求是点击Edittext的时候需要屏幕移动到该Edittext所在位置(最上方的3个控件要保持原来的位置,一直不变),且软键盘不能遮挡
尝试的方法
首先想到的是在Manifest里面给对应的Activity设置android:windowSoftInputMode="adjustPan"属性,但是会遇到ScrollView上面的3个控件一齐被挤出了屏幕之外,效果非常丑陋。
上面的方法不行后,尝试过通过监听被点击的Edittext在屏幕中的相对位置,计算尺ScrollView需要移动的距离,并使用ScrollView的scrollTo方法手动移动至目标位置(这方法有点蠢),但是太复杂了,最终没有采用。
Google,必应的其他方法都是剑走偏锋。
解决方法
- 给RelativeLayout设定 android:fitsSystemWindows="true"属性。
- 给ScrollView设定android:overScrollMode="never"。
- 在Manifest里面为Activity设定android:windowSoftInputMode="stateUnchanged|adjustResize|stateHidden"属性。
- 问题解决,终于可以忙下一个项目了(╯‵□′)╯︵┻━┻