未经本人授权,不得转载!否则必将维权到底
修改前.png一个很常见的需求:点击搜索框 EditText 弹出软键盘,软键盘的回车功能需要变成搜索。记录一下,以后可以直接 Ctrl +C/V
准备工作
不知各位平时玩 App 的时候有没有注意到「 软键盘 」的右下角的图标会随着功能的不同而发生变化。点击不同的编辑框,输入法软键盘右下角会有不同的图标。
- 点击浏览器网址栏的时候,输入法软键盘右下角会变成「 Go 」或「 前往 」
- 点击 EditText 搜索框,输入法软键盘右下角会变成 「 放大镜图标 」 或者「 搜索 」
使图标的变换的参数就是 EditText 中的 Android:imeOptions 属性
android:imeOptions 的值有 actionGo、actionSend 、actionSearch、actionDone 等,这些属性都是见名知意的,根据字面意思理解就行!
代码实现
<EditText
android:id="@+id/keithxiaoySearchEdt"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/bg_has_stroker"
android:drawableLeft="@drawable/search_icon"
android:drawablePadding="10dp"
android:hint="请输入想要搜索的内容"
android:imeOptions="actionSearch"
android:singleLine="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="@color/font_dark"
android:textColorHint="@color/font_gray_light"
android:textSize="14sp" />
android:imeOptions 和 android:singleLine 注意这两个属性要加上!虽然现在 singleLine API 过期了,但是设置新的API maxLine = 1 无效,所以还是需要设置 singleLine = true,否则不生效!!!
keithxiaoySearchEdt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
/*判断是否是“搜索”键*/
if(actionId == EditorInfo.IME_ACTION_SEARCH){
String key = keithxiaoySearchEdt.getText().toString().trim();
if(TextUtils.isEmpty(key)){
PromptBoxUtils.showCustomMsg("请输入您想要搜索的地址");
return true;
}
// 下面就是大家的业务逻辑
searchPoi(key);
// 这里记得一定要将键盘隐藏了
hideKeyBoard();
return true;
}
return false;
}
});
效果图
修改后.png延伸拓展(Android 软键盘的属性)
设置 Android 软键盘属性是在 Manifest 清单文件中的 activity 属性中直接添加
<!-- 找地址页面-->
<activity
android:name="cn.keithxiaoy.FindAddressActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden" />
下面了解一下 清单文件中的 windowSoftInputMode 属性
- stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
- stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
- stateHidden:用户选择activity时,软键盘总是被隐藏
- stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
- stateVisible:软键盘通常是可见的
- stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
- adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
- adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
- adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
我们可以根据实际需求来控制软键盘显示的属性,以实现各式各样特殊的需求。
不要给自己的人生设限
网友评论