android 软键盘问题总结

一软键盘显示原理:
软键盘其实是一个Dialog!InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。当我们点击输入框时,系统对活动主窗口进行调整,从而为输入法腾出相应的空间,然后将该Dialog显示在底部,或者全屏显示。
二参数配置及说明:
在AndroidManifest.xml文件中的Activity有个属性android:windowSoftInputMode,是用于控制软键盘的状态和活动主窗体的调整。
<activity android:windowSoftInputMode=[
//===============键盘状态调整================//
      "stateUnspecified",//软键盘的状态(是否它是隐藏或可见)没有被指定。系统将
                         //选择 一个合适的状态或依赖于主题的设置。这个是为了
                         //软件盘行为默认的设置。
     
      "stateUnchanged",//软键盘被保持无论它上次是什么状态,是否可见或隐藏,当
                       //主窗口出现在前面时。

      "stateHidden",//当用户选择该Activity时,软键盘被隐藏——也就是,当用户确
                    //定导航到该Activity时,而不是返回到它由于离开另一Activity。
     
      "stateAlwaysHidden",//软键盘总是被隐藏的,当该Activity主窗口获取焦点时。
     
      "stateVisible",//软键盘是可见的,当那个是正常合适的时(当用户导航到Activity
                     //主窗口时)。
     
      "stateAlwaysVisible", //当用户选择这个Activity时,软键盘是可见的——也就
                            //是,也就是,当用户确定导航到该Activity时,而不是返
                            //回到它由于离开另一个Activity。
      //===============窗体大小调整================//

     "adjustUnspecified",//它不被指定是否该Activity主窗口调整大小以便留出软键盘的
                         //空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。
                         //系统将自动选择这些模式中一种主要依赖于是否窗口的内容有
                         //任何布局视图能够滚动他们的内容。如果有这样的一个视图,
                         //这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一
                         //个较小的区域中可见的。这个是主窗口默认的行为设置。
     
      "adjustResize", //该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间
     
      "adjustPan"//该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,
                 //当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是
                 //看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关
                 //闭软键盘以便获得与被覆盖内容的交互操作。
  ] …… >
</activity>

三程序中键盘显示与消失监听:
windowSoftinputMode="stateHidden|adjustResize" 时view会调用Measure从新计算窗体大小并会调用onSizeChange函数,在此函数中做处理。(如要操作其他view,请用handler移步操作,否则无效)。

四程序中软键盘的显示与隐藏设置:
显示:
((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).showSoftInput(控件ID, 0);
隐藏:
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(),  InputMethodManager.HIDE_NOT_ALWAYS);

五软件盘回车按键不同显示设置:
把EditText的Ime Options属性设置成不同的值,Enter键上可以显示不同的文字或图案
actionNone : 回车键,按下后光标到下一行
actionSend : Send
actionNext : Next
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框

六软键盘类型控制:
ndroid中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用。这也大大的方便的操作。有时需要虚拟键盘只为字符或只为数字。所以inputType尤为重要。
//文本类型,多为大写、小写和数字符号。
    android:inputType="none"
    android:inputType="text"
    android:inputType="textCapCharacters"
    android:inputType="textCapWords"
    android:inputType="textCapSentences"
    android:inputType="textAutoCorrect"
    android:inputType="textAutoComplete"
    android:inputType="textMultiLine"
    android:inputType="textImeMultiLine"
    android:inputType="textNoSuggestions"
    android:inputType="textUri"
    android:inputType="textEmailAddress"
    android:inputType="textEmailSubject"
    android:inputType="textShortMessage"
    android:inputType="textLongMessage"
    android:inputType="textPersonName"
    android:inputType="textPostalAddress"
    android:inputType="textPassword"
    android:inputType="textVisiblePassword"
    android:inputType="textWebEditText"
    android:inputType="textFilter"
    android:inputType="textPhonetic"
//数值类型
    android:inputType="number"
    android:inputType="numberSigned"
    android:inputType="numberDecimal"
    android:inputType="phone"//拨号键盘
    android:inputType="datetime"
    android:inputType="date"//日期键盘
    android:inputType="time"//时间键盘

猜你喜欢

转载自zjingye.iteye.com/blog/1867978