您的位置:首页 > 移动开发 > Android开发

完全解决输入法覆盖EditText问题, 将界面所有EditText放在输入上方

2014-11-05 16:51 585 查看
</pre>    在应用开发的过程中界面可能出现多个edittext,当开启键盘时可能遮住处在界面下方的edittext。目前解决方法可按下面方案依次推进。<p></p><p>1.在activity的配置文件中设置<span style="color:rgb(68,68,68); font-family:'Microsoft Yahei',Tahoma,Simsun; font-size:14px; line-height:21px">android:windowSoftInputMode="adjustPan|adjustResize"    但这种方式只适用界面中只有一个edittext的情况,因为输入法有可能覆盖当前获取焦点的edittext下方的其他edittext。2.对上面残留的问题我们可以在布局文件中将跟布局设为Scrollview    这样在输入法弹出时用户可以通过滚动界面来编辑edittext,同时也可以监听edittext的statechange事件使用如下方法来将scrollview滚动到底部。</span></p><p><span style="color:rgb(68,68,68); font-family:'Microsoft Yahei',Tahoma,Simsun; font-size:14px; line-height:21px"></span></p><pre name="code" class="java">scrollview.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub

scrollview.fullScroll(ScrollView.FOCUS_DOWN);

}
});


    但这样也存在一个潜在的问题,即当滚动到底部时界面会重新刷新,这样有可能使edittext失去焦点,用户需重新点击一次才能编

辑。

3.对上面的问题可采用下面的方法

<pre name="code" class="java">scrollview.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
scrollview.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub       A,B,C为三个不同的edittext
int flag = 0;
if(A.isFocused())
flag = 1;
else if(B.isFocused())
flag = 2;
else if(C.isFocused())
flag = 3;
scrollview.fullScroll(ScrollView.FOCUS_DOWN);
if(flag == 1)
A.requestFocus();
else if(flag == 2)
B.requestFocus();
else if(flag == 3)
C.requestFocus();;
}
});

}
});



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐