Android 弹出软键盘问题

关于Linux操作系统,发行版、内核的问题

版主: timeboy, absfreedom

Android 弹出软键盘问题

帖子absfreedom 于 2009-10-19 23:30

我想写个程序,让程序运行起来时其他什么都不做,仅仅弹出软键盘,界面上是没有任何显示。

现在写好了个简单的程序,界面有一个按钮和一个EditText,如果在把EditText设为

EditText et;
et.setVisibility(0);

设置为Visibility为0, 让EditText显示出来,点击按钮,调用:
66 InputMethodManager imm = (InputMethodManager)
67 et.getContext().getSystemService(Context. INPUT_METHOD_SERVICE);
68 imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);

是可以调出软键盘来的,不过把
et.setVisibility(0);
设置为:
et.setVisibility(4);
或者
et.setVisibility(8);
使得EditText隐藏(目的就是让主界面不显示任何东西只调用软键盘),软键盘就调用不出来了。
实在不知道是什么原因,求各位知道的朋友指点一下。比较着急,555

假如要是让一个程序直接调用一个view,让view不显示出来,用view这个类再调用软键盘,是不是就可以让activity一启动就直接把软键盘调出来了?谢谢,在线等
4bsfreedom(a)gmail.com
头像
absfreedom
 
帖子: 679
注册: 2008-10-09 10:14

Re: Android 弹出软键盘问题

帖子absfreedom 于 2009-10-19 23:30

4bsfreedom(a)gmail.com
头像
absfreedom
 
帖子: 679
注册: 2008-10-09 10:14

Re: 弹出软键盘问题

帖子absfreedom 于 2009-10-19 23:32

这里感谢 mgssnake 兄的帮忙,为我们的死锁撕开了一道口子

http://www.eoeandroid.com/thread-5325-1-1.html

前两天看到论坛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. }


以上的代码,我是通过按钮点击弹出的方法,至于absfreedom 文章中说的,界面出现后就显示出输入法,暂时没有找到方法,还有待大家一起参悟下。

toggleSoftInput方法来自API的解释如下:
This method toggles the input method window display.
If the input window is already displayed, it gets hidden.
If not the input window will be displayed

这个方法进行着切换在界面上输入法的功能,如果输入法当前处于显示状态,那么就会将它隐藏,如果没有的话,就自然将其显示
可惜无法继续查看它下面的实现方法,我只能从源代码中了解到这里
4bsfreedom(a)gmail.com
头像
absfreedom
 
帖子: 679
注册: 2008-10-09 10:14

Re: Android 弹出软键盘问题

帖子absfreedom 于 2009-10-19 23:32

等楼下给出解决方案 :lol:
4bsfreedom(a)gmail.com
头像
absfreedom
 
帖子: 679
注册: 2008-10-09 10:14

Re: Android 弹出软键盘问题

帖子byebye 于 2009-10-20 10:58

这个真不懂,帮顶
LZ大半夜的还在在线等,精神可嘉
头像
byebye
 
帖子: 503
注册: 2008-10-09 10:10

Re: Android 弹出软键盘问题

帖子zxbeef 于 2009-10-22 15:21

:mrgreen: 此问题现在已经解决了。
在onCreate函数中不能直接弹出软键盘,可能是因为Activity在起来的时候初始化程序还未完全启动,这和Activity的生命周期有关系。
解决办法,在onCreate函数中建一个线程,让该线程延迟足够长的时间,然后在线程中弹出软键盘,也就是showSoftInput。
隐藏控件可以实现,但是隐藏了就没有了焦点,就不能取得该控件中的值了,所以将该控件移至屏幕之外。
zxbeef
 
帖子: 487
注册: 2009-03-04 14:33

Re: Android 弹出软键盘问题

帖子timeboy 于 2009-10-23 8:53

1秒和2秒还是很不一样的.....
timeboy
 
帖子: 341
注册: 2008-12-10 12:28

Re: Android 弹出软键盘问题

帖子zxbeef 于 2009-10-23 9:18

timeboy 写道:1秒和2秒还是很不一样的.....

:oops: 这个就囧了...1秒不对,换成2秒就好了...
话说主线程如果超过5秒就会报错,onCreate就占去2秒...那么只剩3秒可以干活了... :?:
zxbeef
 
帖子: 487
注册: 2009-03-04 14:33

Re: Android 弹出软键盘问题

帖子zxbeef 于 2009-10-26 14:07

:D 网上发帖求助,有人又给出别的解决办法。
在onCreate函数中设定一个定时器,延迟一定时间,弹出软键盘。
其实原理和thread.sleep()是一样的,定时器也是一个线程,只不过已经封装好了。
不能弹出软键盘的主要原因是在onCreate函数中Android程序未将屏幕绘制完成。
代码: 全选
Timer timer = new Timer();
timer.schedule(new TimerTask()
{
   @Override
   public void run() {
      InputMethodManager imm = (InputMethodManager)vv.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
      Toast.makeText(test.this, "show", Toast.LENGTH_SHORT).show();
   }
}, 1000);
zxbeef
 
帖子: 487
注册: 2009-03-04 14:33

Re: Android 弹出软键盘问题

帖子absfreedom 于 2009-10-28 9:29

再次感谢mgssnake兄的热心解答,求助帖子的地址mgssnake另外又开了一个帖子,一块贴到这里做个合集

http://www.eoeandroid.com/thread-5420-1-1.html
4bsfreedom(a)gmail.com
头像
absfreedom
 
帖子: 679
注册: 2008-10-09 10:14

下一页

回到 Linux操作系统

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客