Android 使软键盘的回车按钮变成搜索按钮

未经本人授权,不得转载!否则必将维权到底

一个很常见的需求:点击搜索框 EditText 弹出软键盘,软键盘的回车功能需要变成搜索。记录一下,以后可以直接 Ctrl +C/V

修改前.png

#准备工作
不知各位平时玩 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:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分

我们可以根据实际需求来控制软键盘显示的属性,以实现各式各样特殊的需求。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,当软键盘弹出时,按钮通常会被遮挡,如果希望让按钮随着软键盘向上移动,可以通过以下步骤实现: 1. 首先,在你的布局文件中,将整个布局包裹在一个ScrollView中,以便能够上下滚动内容。 2. 在AndroidManifest.xml文件中,找到对应Activity的节点,并添加属性:android:windowSoftInputMode="adjustResize"。这会使得在软键盘弹出时,布局会随之调整以适应软键盘。 3. 在Java代码中,为按钮所在的父布局设置一个监听器,用于监听软键盘的显示和隐藏事件。 ``` View rootView = findViewById(R.id.root_layout); rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); rootView.getWindowVisibleDisplayFrame(r); int screenHeight = rootView.getRootView().getHeight(); int keypadHeight = screenHeight - r.bottom; if (keypadHeight > screenHeight * 0.15) { // 如果软键盘的高度超过屏幕高度的15%,即软键盘显示状态 // 移动按钮,使其显示在软键盘的上方 button.setVisibility(View.VISIBLE); } else { // 如果软键盘的高度小于15%,即软键盘隐藏状态 // 恢复按钮原来的位置 button.setVisibility(View.GONE); } } }); ``` 通过以上步骤,当软键盘弹出时,按钮所在的布局会向上移动,确保按钮不被软键盘遮挡。当软键盘隐藏时,按钮会恢复到原来的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值