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

</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();;
                    }
                });
                
            }
        });


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值