很多开发者在写登陆界面的时候都会遇到同样的问题,在登陆界面时,当你点击输入框里,下边的按钮有时会被输入框挡住,这个很影响用户体验,很多人都设想软键盘弹出时,能把按钮挤上去,达到监听键盘的状态,下面我们就来看看解决办法。
我们可以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = \"adjustResize\" ,软键盘弹出时,要对主窗口布局重新进行布局,并调用onSizeChanged方法,切记一点当我们设置为“adjustResize”时,我们的界面不要设置为全屏模式,否则设置了这个属性也不会有什么效果。而当我们设置android:
windowSoftInputMode = \"adjustPan\"时,主窗口就不会调用onSizeChanged方法,界面的一部分就会被软键盘覆盖住,就不会被挤到软键盘之上了。
我们通过一段代码来测试一下,当我们设置了该属性后,弹出输入法时,系统做了什么:
重写Layout布局:
1.
[java] view plaincopyprint?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
public class ResizeLayout extends LinearLayout{ private static int count = 0;
public ResizeLayout(Context context, AttributeSet attrs) { super(context, attrs); }
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh);
Log.e(\"onSizeChanged \" + count++, \"=>onResize called! w=\"+w + \+h+\+oldw+\h=\"+oldh);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b);
Log.e(\"onLayout \" + count++, \"=>OnLayout called! l=\" + l + \ + t + \ + r + \+b); }
IT在线教育平台——麦子学院http://www.maiziedu.com
20. 21. 22. 23. 24. 25. 26.
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);
Log.e(\"onMeasure \" + count++, \"=>onMeasure called! widthMeasureSpec=\" + widthMeasureSpec + \ + heightMeasureSpec);
}
2.
我们的布局设置为:
1.
[html] view plaincopyprint?
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
IT在线教育平台——麦子学院http://www.maiziedu.com 27. 28.
2.
AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = \"adjustResize\" 运行程序,点击文本框,查看调试信息:
E/onMeasure 6(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742024
E/onMeasure 7(7960): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec = 1073742025
E/onSizeChanged 8(7960): =>onSizeChanged called! w=320,h=201,oldw=320,oldh=377 E/onLayout 9(7960): =>OnLayout called! l=0, t=0,r=320,b=201
从调试结果我们可以看出,当我们点击文本框后,根布局调用了onMeasure,onSizeChanged和onLayout。
windowSoftInputMode的值如果设置为adjustPan,那么该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
上面的例子中,我们将AndroidManifest.xml的属性进行更改:android: windowSoftInputMode = \"adjustPan\"
重新运行,并点击文本框,查看调试信息:
E/onMeasure 6(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742200
IT在线教育平台——麦子学院http://www.maiziedu.com
E/onMeasure 7(8378): =>onMeasure called! widthMeasureSpec=1073742144, heightMeasureSpec=1073742201
E/onLayout 8(8378): =>OnLayout called! l=0, t=0,r=320,b=377
我们看到:系统也重新进行了measrue和layout,但是我们发现,layout过程中onSizeChanged并没有调用, 这说明输入法弹出前后并没有改变原有布局的大小。
如需了解更多相关知识,请至麦子学院官网查询。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务