原创文章,转载请注明出处:http://blog.csdn.net/myth13141314/article/details/54972337
属性值 含义 “stateUnspecified” 不指定软键盘的状态(隐藏还是可见)。 将由系统选择合适的状态,或依赖主题中的设置。这是对软键盘行为的默认设置。当我们没有设置android:windowSoftInputMode属性的时候,软件默认采用的就是这种交互方式,系统会根据界面采取相应的软键盘的显示模式。 “stateUnchanged” 当 Activity 转至前台时保留软键盘最后所处的任何状态,无论是可见还是隐藏。当前界面的软键盘状态,取决于上一个界面的软键盘状态,无论是隐藏还是显示。 “stateHidden” 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 隐藏软键盘。当设置该状态时,软键盘总是被隐藏,不管是否有输入的需求。 “stateAlwaysHidden” 当 Activity 的主窗口有输入焦点时始终隐藏软键盘。当设置该状态时,软键盘总是被隐藏,和stateHidden不同的是,当我们跳转到下个界面,如果下个页面的软键盘是显示的,而我们再次回来的时候,软键盘就会隐藏起来。 “stateVisible” 在正常的适宜情况下(当用户向前导航到 Activity 的主窗口时)显示软键盘。当设置为这个状态时,软键盘总是可见的,即使在界面上没有输入框的情况下也可以强制弹出来出来。 “stateAlwaysVisible” 当用户选择 Activity 时 — 也就是说,当用户确实是向前导航到 Activity,而不是因离开另一 Activity 而返回时 — 显示软键盘。当设置为这个状态时,软键盘总是可见的,和stateVisible不同的是,当我们跳转到下个界面,如果下个页面软键盘是隐藏的,而我们再次回来的时候,软键盘就会显示出来。 “adjustUnspecified” 不指定 Activity 的主窗口是否调整尺寸以为软键盘腾出空间,或者窗口内容是否进行平移以在屏幕上显露当前焦点。 系统会根据窗口的内容是否存在任何可滚动其内容的布局视图来自动选择其中一种模式。 如果存在这样的视图,窗口将进行尺寸调整,前提是可通过滚动在较小区域内看到窗口的所有内容。这是对主窗口行为的默认设置。 “adjustResize” 始终调整 Activity 主窗口的尺寸来为屏幕上的软键盘腾出空间。也就是布局内容会被软键盘顶上去 。这个选项不能和adjustPan同时使用,如果这两个属性都没有被设置,系统会根据窗口中的布局自动选择其中一个。 “adjustPan” 不调整 Activity 主窗口的尺寸来为软键盘腾出空间, 而是自动平移窗口的内容,使当前焦点永远不被键盘遮盖,让用户始终都能看到其输入的内容。 这通常不如尺寸调正可取,因为用户可能需要关闭软键盘以到达被遮盖的窗口部分或与这些部分进行交互。也就是软键盘会盖住布局内容。
EditText的属性设置
属性值 含义 android:hint 设置提示的信息,常见如:“请输入要搜索的内容”等 android:textColorHint 设置提示信息的文字颜色,就是上面的hint的颜色 android:maxLines 顾名思义就是设置最多显示的行数 android:maxLength 控制最大的输入长度 android:focusableInTouchMode 设置点击是否能获取焦点,如果设置为false,则点击EditText也获取不到焦点 android:focusable 也是设置是否能获取焦点,focusableInTouchMode=”true”,一定会使focusable=“true”;focusable=“false”,一定会使focusableInTouchMode=“false”。所以要使EditText获取不到焦点,设置任意一个为false即可 android:cursorVisible 控制光标显示,false则光标不显示,默认为true android:textCursorDrawable 控制光标的颜色,如果设置为“@null”则颜色和text color一样 android:imeOptions 可以根据需要设置不同的值来达到不同的效果,如果需要自定义回车的按钮功能必须同时设置android:singleLine=”true”或是设置android:inputType android:inputType 参考:https://developer.android.com/training/keyboard-input/style.html#Action
android:imeOptions的属性含义
属性值 效果 “flagNoExtractUi” 使软键盘不全屏显示,只占用一部分屏幕 “actionNone” 输入法回车键不带任何提示 “actionGo” 输入法回车键为“开始” “actionSearch” 输入法回车键为“搜索” “actionSend” 输入法回车键为“发送” “actionNext” 输入法回车键为“下一个” “actionDone” 输入法回车键为“完成”
设置了android:imeOptions属性以后可以设置ActionListener来监听回车键的事件,以便进行相应的处理
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction (TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
KeyText = editText.getText().toString().trim();
return true ;
}
return false ;
}
});
EditText还可以设置监听输入内容的变化
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged (CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged (Editable editable) {
if ("" .equals(editText.getText().toString().trim())) {
}
}
});
延时自动弹出软件盘
public static void showSoftKeyboardLate (final View view) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run () {
Context context = view.getContext();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
view.requestFocus();
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
}, 998 );
}
public static void toggleSoftKeyboard (Context context, View view, boolean isShow) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
if (isShow) {
view.requestFocus();
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
} else {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0 );
}
}
欢迎关注我的公众号,和我一起每天进步一点点!