前两天看到论坛absfreedom 提了一个弹出软键盘的问题(http://www.eoeandroid.com/viewthread.php?tid=5261page=1#pid60541),但是一直都无人解答,我对android也是一个新手,希望有高人可以指点一两,让我们也能学习一下,但是到现在为止都没朋友可以解答,所以就自己研究了一番,终于研究了一个解决办法,特给各位分析下成果,希望有需要的朋友,下次不会再出现无解的情况了 ,上代码
1.
2. edit = (EditText)findViewById(R.id.EditText01);
3. edit.setVisibility(EditText.GONE);
4.
5. ....
6. btn = (Button)findViewById(R.id.Button01);
7. btn.setOnClickListener(new OnClickListener(){
8. public void onClick(View v) {
9. InputMethodManager m = (InputMethodManager)edit.getContext()
10. .getSystemService(Context.INPUT_METHOD_SERVICE);
11. m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);//调用输入法弹出、收缩方法,设置的两个值为显示时的flag和隐藏时的flag
12. }
次解决了使用一个按钮弹出软键盘的方法,但是还是没有达到最终效果,界面加载完成自动弹出软键盘,昨天琢磨了半天,最终想到了解决办法。之所以再开一个新帖,是想让有需要的朋友,可以看到这个解决办法。
解决思路:就是设置一个定时器,让其在页面加载成功后,过一会再运行软键盘弹出事件。其它弹出软键盘代码和我之前做的button弹出软键盘代码一样,我上次只是简单的把代码放在onCreate的最后面,但是界面呈现的时候并没有弹出软键盘。昨天又想这个问题的时候,想到了会不会是界面绘制需要一些时间,如果把弹出软键盘的代码用线程单独跑,会不会就会成功呢?带着这个疑问,我就写了如下的代码,果然最后的效果和我的想法一致,成功出现了软键盘。
代码如下:
- Timer timer = new Timer();
- timer.schedule(new TimerTask(){
- @Override
- public void run() {
- InputMethodManager m = (InputMethodManager)
- edit.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
- m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
- Toast.makeText(Key.this, "show", Toast.LENGTH_SHORT).show();
- }
- }, 1000);
以上是我的猜测想法,希望了解android界面绘制机制的朋友出来说几句