android 软件盘的显示和隐藏

一、启动Activity时显示软件盘

启动Activity时显示软件盘,可以用如下的方式
 首先得到InputMethodManage
  InputMethodManager m = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
 然后调用InputMethodManager的以下方法
 boolean  showSoftInput(View view, int flags, ResultReceiver resultReceiver)
 boolean  
showSoftInput(View view, int flags)
 void  
showSoftInputFromInputMethod(IBinder token, int flags)
 public void 
toggleSoftInput (int showFlags, int hideFlags)
 public void 
toggleSoftInputFromWindow (IBinder windowToken, int showFlags, int hideFlags)
 但是上面InputMethodManager的方法在Actiivtiy的oncreate()onResume()中调用会没有作用。
可能是因为View还没有准备好,所以不起作用。网上找来的理由说是:软件盘是要在所有view画完才能显示。

 可以采用timerHandler延迟在执行。

     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);

调用InputMethodManager的以下方法可以关闭软键盘
void  hideSoftInputFromInputMethod(IBinder token, int flags)
Close/hide the input method's soft input area, so the user no longer sees it or can interact with it.
boolean  hideSoftInputFromWindow(IBinder windowToken, int flags)
Synonym for {@link #hideSoftInputFromWindow(IBinder, int, ResultReceiver) without a result: request to hide the soft input window from the context of the window that is currently accepting input.
boolean  hideSoftInputFromWindow(IBinder windowToken, int flags, ResultReceiver resultReceiver)
Request to hide the soft input window from the context of the window that is currently accepting input.
注意:关闭键盘的时候不再可以像开启一样传递View,而必须是View的IBinder,可以通过View的getWindowToken()得到相应的IBinder。

二、Eidtext可以自己自动地弹出软键盘
 Eidtext这个控件默认是你点击了它获得焦点之后如果软键盘还没打开就会自动地弹出软键盘。
 前提是你在竖屏的时候。但横盘的时候,不会自动弹出弹出软键盘了。

 注意:这种情况下,Eidtext在这次事件中就不再进行光标定位的处理。

三、manifest中对软键盘弹出的属性进行设置
 可以在activity的android:windowSoftInputMode属性进行设置
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] > 
android:windowSoftInputMode
    How the main window of the activity interacts with the window containing the on-screen soft keyboard. The setting for this attribute affects two things:
        * The state of the soft keyboard — whether it is hidden or visible — when the activity becomes the focus of user attention.
        * The adjustment made to the activity's main window — whether it is resized smaller to make room for the soft keyboard or 
        whether its contents pan to make the current focus visible when part of the window is covered by the soft keyboard.
    The setting must be one of the values listed in the following table, or a combination of one "state..." value plus one "adjust..." value. 
    Setting multiple values in either group — multiple "state..." values, for example — has undefined results. Individual values are separated by a vertical bar (|). For example:
    <activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >
    Values set here (other than "stateUnspecified" and "adjustUnspecified") override values set in the theme.
    Value  Description
    "stateUnspecified"  The state of the soft keyboard (whether it is hidden or visible) is not specified. The system will choose an appropriate state or rely on the setting in the theme.

软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
    This is the default setting for the behavior of the soft keyboard.
    "stateUnchanged"  The soft keyboard is kept in whatever state it was last in, whether visible or hidden, when the activity comes to the fore.当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
    "stateHidden"  The soft keyboard is hidden when the user chooses the activity — that is, when the user affirmatively navigates forward to the activity, rather than backs into it because of leaving another activity.用户选择activity时,软键盘总是被隐藏

    "stateAlwaysHidden"  The soft keyboard is always hidden when the activity's main window has input focus.当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
    "stateVisible"  The soft keyboard is visible when that's normally appropriate (when the user is navigating forward to the activity's main window).软键盘通常是可见的
    "stateAlwaysVisible"  The soft keyboard is made visible when the user chooses the activity — that is, when the user affirmatively navigates forward to the activity, rather than backs into it because of leaving another activity.用户选择activity时,软键盘总是显示的状态
    "adjustUnspecified"  It is unspecified whether the activity's main window resizes to make room for the soft keyboard, or whether the contents of the window pan to make the currentfocus visible on-screen. The system will automatically select one of these modes depending on whether the content of the window has any layout views that can scroll their contents. If there is such a view, the window will be resized, on the assumption that scrolling can make all of the window's contents visible within a smaller are。由系统自行决定采用adjustResize还是adjustPan

    This is the default setting for the behavior of the main window.
    "adjustResize"  The activity's main window is always resized to make room for the soft keyboard on screen.
    这个可以让view自己调整大小以便显示软键盘。这样的话控件可能会变形。
    "adjustPan"  The activity's main window is not resized to make room for the soft keyboard. 
    Rather, the contents of the window are automatically panned so that the current focus is never obscured by the keyboard and users can always see what they are typing. 
    This is generally less desirable than resizing, because the user may need to close the soft keyboard to get at and interact with obscured parts of the window.
    这种方式是通过调整view的空白区域来显示软键盘。即使调整空白区域,软键盘还是有可能遮挡一些有内容区域。这样的话用户就只有退出软键盘才能看到这些被遮挡区域并进行交互。
 官方相关文档地址:http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft
如何监听软键盘是否打开?
 到目前为止还没找到监听软键盘是否被开启的方法。
 网上建议用onConfigurationChanged (Configuration newConfig)的来对Configuration的keyboardHidden来监听的方法在三星的手机上也无效。
 public int keyboardHidden
  Since: API Level 1
  A flag indicating whether any keyboard is available. 
  Unlike hardKeyboardHidden, this also takes into account a soft keyboard, 
  so if the hard keyboard is hidden but there is soft keyboard available, it will be set to NO.
   Value is one of: KEYBOARDHIDDEN_NO, KEYBOARDHIDDEN_YES.

 注:在三星的手机上可以同过监听广播来监听软键盘的开启和隐藏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值