1、使用对象通常是TextView 或者他的子类
2、通过设置Activity 的windowSoftInputMode 属性来处理当键盘显示的时候被隐藏的空间的处理方式以及软键盘是否默认显示。
它的值必须下列列表的中的值,一般是一个 "state.." 值加一个"adjust.." 值。比如
android:windowSoftInputMode="stateAlwaysVisible|adjustPan"
- stateUnspecified:软键盘状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
- stateUnchanged:当这个Activity 出现时,软键盘将一直保持在上一个Activity 里的状态
- stateHidden:用户选择Activity 时,软键盘总是被隐藏
- stateAlwaysHidden:当该Activity 主窗口获取焦点时,软键盘也总是被隐藏
- stateVisible:软键盘通常是可见的
- stateAlwaysVisible:用户选择了该Activity 后软键盘总是显示的状态
- adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
- adjustResize:该Activity 总是调整屏幕的大小以便留出软键盘的空间
- adjustPan:当前窗口自动移动,以便当前焦点不被键盘覆盖,用户总能看见输入内容的部分
安全性:
因为他本质上完全驱动了UI,并且能够监听用户的任何输入。而且Android 允许第三方的(自定义)的IME,所以要非常慎重的考虑他的安全性
1、仅仅系统才可以直接访问InputMethod 接口,通过BIND_INPUT_METHOD permission。他保证了不会被其他不被信任的客户端访问。
2、可能有许多的客户端进程在访问IMF,但只有一个是活动的。其他非活动的是不可以与IMF 交互的
3、客户端是通过InputMethodSession 接口与IME来交互的。它会为每一个客户端创建一个实例,仅仅正在被执行的客户端的InputMethodSession才会与当前的IME交互。
4、仅仅活动的客户端的InputConnection 才会接受操作。IMF会告诉每一个进程是否它是活动的。并且不活动的进程调用当前的InputConnection 将会被忽略。这保证了IME只能传递事件和text给当前用户可见的UI
5、IME不会与InputConnection 交互当屏幕关闭的时候。
6、客户端应用程序可以访问系统让用户来选择一个新的IME,但是不能以编程(动态代码)的方式来切换到它自己。另一方面,一个IME,如果它有了用户输入的完整控制权,那么他是允许以编程的方式来切换到另一个输入法的
7、用户必须明确的设置开启一个新的IME,在切换使用它之前。以便来告诉系统用户是了解此输入法的并且想使用它
下面说一下软键盘的最基本使用方法:
mEditTextPassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
//获取系统 IMM
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if (!hasFocus) {
//隐藏 软键盘
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
} else {
//显示 软键盘
imm.showSoftInput(v, 0);
}
}
});