一、结构包名
android.view.inputmethod.InputMethodManager

二、类概述

  整个输入法框架(IMF)结构的核心API,应用程序之间进行调度和当前输入法交互。你可以用Context.getSystemService()取得这一接口的实例。

  架构总述(Architecture Overview)

  输入法框架(IMF)共有三个主要部分:

  * 输入法管理器,管理各部分的交互。它是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务。

  * 输入法(IME) ,实现一个允许用户生成文本的独立交互模块。系统绑定一个当前的输入法。使其创建和生成,决定输入法何时隐藏或者显示它的UI。同一时间只能有一个IME运行。

  * 客户应用程序,通过输入法管理器控制输入焦点和IME的状态。一次只能有一个客户端使用IME。

  应用程序(Applications)

  大多数情况下,使用标准TextView或其子类的应用程序只要做少量工作就可以让软键盘(soft input methods)正常工作。你要注意的是:

  * 正确设置你的可编辑文本视图inputType,这样输入法有足够的上下文帮助用户向其输入文本。

  * 当输入法显示时妥善处理隐藏屏幕空间。理想的情况下应用程序应处理窗口变小,如必要你可以利用系统执行平移窗口。你应在活动(activity)中设置windowSoftInputMode属性或调整创建窗口的相应值,以便系统决定平移或缩放(它会尝试自动调整但可能出错)。

  * 你还可以通过相同的windowSoftInputMode控制窗口的首选软键盘状态(打开、关闭等)。

  通过API可以与IMF及其IME交互实现更细致的控制,如显示或输入区域,用户选取某输入法等。

  当你编写自己的文本编辑器的时候,你要实现onCreateInputConnection(EditorInfo)以返回你的InputConnection的接口实例,用来允许IME和你的文本编辑域来交互。

   输入法(Input Methods):一个输入法(IME)是Service(服务)的实现,通常继承自 InputMethodService。IME提供核心的 InputMethod接口,尽管提供InputMethod通常是由InputMethodService来处理,而IME的实现只需要处理更高层的API。输入法关系到许多安全问题,因其基本不受约束地驱动UI并监视用户输入。Android输入法框架还允许调度第三方IME,所必须小心以限制他们的选择和相互作用。以下是IMF背后安全架构的要点:1、 只允许系统访问经BIND_INPUT_METHOD权限许可访问IME的InputMethod接口。通过绑定到要求这个权限的服务来强制实现这一点。所以系统可以保证没有不被信任的客户端在它的控制之外访问到当前的输入法。2、IMF中可能有许多客户进程,但在同一时间只有一个是激活的。未激活客户端不能与IMF核心交互通过下述机制实现。3、 输入法客户端只可访问InputMethodSession接口。每个客户端创建一个接口实例,只有与激活客户相关联的会话的调用才会被IME处理。这点通过普通IME的 AbstractInputMethodService执行,必须由IME显式的处理,而IME正是InputMethodSession的自定义实现。4、 只有激活的InputConnection接受操作。IMF通知每个客户进程是否激活,IMF忽略非激活进程对当前输入联接的调用。这确保了当前IME只将事件和文本编辑交付用户可见焦点的UI。5、 一个IME永远不能在屏幕关闭时与 InputConnection交互。这是通过当屏幕关闭时所有客户端无效,并防止不良IME在用户无法关注其行为时驱动UI。6、 客户应用程序可以要求系统选取一个新的IME,但不能编程式选择之一。这是避免恶意程序在用户导航到其它应用程序时,选择自己的IME并保持运行。也就是说,IME可以编程式的要求系统选择其它IME,因它完全控制了用户输入。用户在可切换至一个新的IME前必须显式的启用它,以确认系统了解它,使其处于可用状态。

三、常量

    public static final int HIDE_IMPLICIT_ONLY,hideSoftInputFromWindow(IBinder, int)中的标志,表示如果用户未显式地显示软键盘窗口,则隐藏窗口。常量值: 1 (0x00000001)

    public static final int HIDE_NOT_ALWAYS,hideSoftInputFromWindow(IBinder, int)中的标志,表示软键盘窗口总是隐藏,除非开始时以SHOW_FORCED显示。常量值: 2 (0x00000002)

    public static final int RESULT_HIDDEN,showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口从显示切换到隐藏时的状态。常量值: 3 (0x00000003)

    public static final int RESULT_SHOWN,showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口从隐藏切换到显示时的状态。常量值: 2 (0x00000002)

    public static final int RESULT_UNCHANGED_HIDDEN,showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口不变保持隐藏时的状态。常量值: 1 (0x00000001)

    public static final int RESULT_UNCHANGED_SHOWN,showSoftInput(View, int, ResultReceiver)和hideSoftInputFromWindow(IBinder, int, ResultReceiver)中ResultReceiver结果代码标志:软键盘窗口不变保持显示时的状态。常量值: 0 (0x00000000)

    public static final int SHOW_FORCED,showSoftInput(View, int)标志,表示用户强制打开输入法(如长按菜单键),一直保持打开直至只有显式关闭。 常量值: 2 (0x00000002)

    public static final int SHOW_IMPLICIT, showSoftInput(View, int)标志,表示隐式显示输入窗口,非用户直接要求。窗口可能不显示。常量值: 1 (0x00000001)

四、公共方法

    public void displayCompletions (View view, CompletionInfo[] completions)(译者注:输入法自动完成)

    public InputMethodSubtype getCurrentInputMethodSubtype ()(译者注:获取当前输入法类型?)

    public List getEnabledInputMethodList ()(译者注:获取已启用输入法列表?)

    public List getEnabledInputMethodSubtypeList (InputMethodInfo imi, boolean allowsImplicitlySelectedSubtypes)

    public List getInputMethodList ()(译者注:获取输入法列表)

    public Map

public class InputMethodManagerTest extends Activity implements OnClickListener{      private Button button;      @Override      protected void onCreate(Bundle savedInstanceState) {          // TODO Auto-generated method stub         super.onCreate(savedInstanceState);          LinearLayout layout=new LinearLayout(this);          LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);          button=new Button(this);          button.setId(123);          button.setText("Hello GaoMatrix");          button.setOnClickListener(this);          layout.addView(button, layoutParams);          setContentView(layout);          /** * 用一个定时器控制当打开这个Activity的时候就出现软键盘 */          Timer timer=new Timer();          timer.schedule(new TimerTask() {              @Override              public void run() {                  InputMethodManager inputMethodManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                  inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);              }          }, 2000);      }      /** * 当单击事件的时候触发显示软键盘 */      @Override      public void onClick(View v) {          InputMethodManager inputMethodManager=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);          inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);      }  }  

这个InputMethodManager类里面的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.

这个方法在界面上切换输入法的功能,如果输入法出于现实状态,就将他隐藏,如果处于隐藏状态,就显示输入法。

而对于第二中方式进入Activity就自动显示软键盘,在一个定时器中,也就是在一个线程中执行,只不过是延迟2秒执行,原因是在onCreate函数中Android程序未将屏幕绘制完成。

更多相关文章

  1. Android控件
  2. Android(安卓)如何让悬浮窗口覆盖显示在导航栏之上?
  3. Android——自由拖动并显示文字的悬浮框实现
  4. android TextView EditTextView一些技巧使用 (视图代码布局)
  5. Android调用相机拍摄照片并显示到 ImageView控件中
  6. Android(安卓)Bitmap与Canvas
  7. Android(安卓)tablet Fragment 中 TableLayout的同一行相邻的两
  8. android中menu.add()的使用说明
  9. Android学习笔记(三十):弹出信息-Toast和告警

随机推荐

  1. Android获取局域网所有设备的ip地址
  2. Android屏蔽EditText软键盘的方法
  3. 1.1使用内置的Camara应用程序捕捉图像
  4. 第九节(Activity布局初步二--嵌套布局)
  5. Android开发自动生成的AndroidManifest.x
  6. Android WindowManager$BadTokenExceptio
  7. Kotlin学习笔记:为什么要学习kotlin和kotl
  8. Android中 WebView打开一个网页实例
  9. TableLayout (2)
  10. android 设置全屏显示 和 自适应屏幕