EditText

本文深入探讨了EditText的常用属性设置(如imeOptions、inputType)、事件监听(如点击事件、内容变化事件),以及如何处理编辑框内容的输入验证、错误提示与软键盘控制,提供了丰富的实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. EditText继承自TextView.


2.EditText属性

 <item name="android:imeOptions">actionSearch</item>

通过android:imeOptions 设置右下角按钮显示内容.常用的如actionGo,actionSearch,actionSend,actionNext,actionDone等。

     android:inputType="phone"

通过android:inputType属性设置输入内容的限制。number,phone,textPassword等等。

注意  android:inputType="numberDecimal",这样允许用户输入数字和点号,这是可以只输入点号的。所以在从编辑框获取内容转化为Double类型时需要捕获异常。

  try {
            double budget = Double.valueOf(budgetStr);
            if (budget == 0) {
                Toast.makeText(SetBudgetActivity.this, "设置金额不能为0", Toast.LENGTH_LONG).show();
                return;
            }
        } catch (NumberFormatException e) {
            Toast.makeText(SetBudgetActivity.this, "请输入数字", Toast.LENGTH_LONG).show();
            return;
        }



3.事件监听:

点击事件监听:

 EditText search = (EditText) getView().findViewById(R.id.search);

        search.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                    onSearch();
                    return true;
                }
                return false;
            }
        });

注意如果没有输入内容时软键盘是不应该隐藏的,即在判断用户输入正确后才隐藏软键盘。

  //隐藏软键盘
        View focusView = getActivity().getCurrentFocus();
        if (focusView != null) {
            ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(focusView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }


编辑框内容监听:

      search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
//在这里检测用户的输入,比如检测用户输入大于100,输入需要屏蔽的字符等等
            }

            @Override
            public void afterTextChanged(Editable s) {//在这里检测用户输入结束
                String key = s.toString();
                if (TextUtils.isEmpty(key)) {
                    View focusView = getCurrentFocus();
                    if (focusView != null) {
                        ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(focusView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                    }

                }

            }
        });

4.编辑框错误提示

方式1:使用Toast进行提示

方式2:通过TextView的方法setError()进行提示,在EditText右边弹出错误信息。需要注意:错误提示信息和提示框背景颜色一样,都是白色,需要修改,否则看不到文字。

setError(null)错误信息将被清除。

   CharSequence html = Html.fromHtml("<font color=#808183>请输入用户名</font>");
            phoneEdit.setError(html);


或者设置主题,添加item
 <item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item>

将文字设置为黑色。


5.编辑框弹出软键盘设置:

windowSoftInputMode属性主要有adjustPan,adjustResize

adjustPan不进行重新布局

adjustResize重新布局,调整布局以留出软键盘空间。


 所以在AndroidManifest.xml的Activity设置属性:android:windowSoftInputMode = "adjustResize|stateAlwaysHidden"

stateAlwaysHidden进入activity时不主动弹出软键盘。注意这个需要在布局外边添加一个ScrollView使布局可以滚动。









### EditText 的基本用法 `EditText` 是 Android 中用于输入文本的一个控件。通过 XML 布局文件定义 `EditText` 控件并为其分配 ID,可以在 Java 或 Kotlin 文件中对其进行操作。 #### 定义布局中的 EditText 在 XML 布局文件中,可以通过以下属性配置 `EditText`[^2]: ```xml <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your name" /> ``` 上述代码创建了一个宽度匹配父容器、高度包裹内容的 `EditText` 输入框,并设置了提示文字 "Enter your name"。 #### 获取 EditText 实例 在 Activity 或 Fragment 中,可以使用 `findViewById()` 方法获取 `EditText` 对象实例[^1]: ```java EditText editText = findViewById(R.id.editText); ``` #### 设置监听器 为了响应用户的输入变化,可以为 `EditText` 添加 `TextWatcher` 监听器[^3]: ```java editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // 当用户输入时触发此方法 System.out.println("Current input: " + s.toString()); } @Override public void afterTextChanged(Editable s) {} }); ``` #### TextInputLayout 集成 如果希望实现更高级的功能(如浮动标签或显示错误消息),可以将 `EditText` 放入 `TextInputLayout` 中[^4]: ```xml <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your name" /> </com.google.android.material.textfield.TextInputLayout> ``` 当用户点击输入框时,`TextInputLayout` 会自动执行上浮动画效果并将占位符移动到顶部。 #### 存储与读取数据 对于需要保存用户输入的情况,可以利用 SharedPreferences 来存储简单的键值对数据[^5]。以下是完整的存取流程: ##### 数据存储 ```java SharedPreferences sharedPreferences = getSharedPreferences("UserPrefs", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString("name", editText.getText().toString()); editor.apply(); // 提交更改 ``` ##### 数据读取 ```java SharedPreferences sharedPreferences = getSharedPreferences("UserPrefs", MODE_PRIVATE); String savedName = sharedPreferences.getString("name", ""); System.out.println("Saved Name: " + savedName); ``` --- ### 总结 `EditText` 是 Android 开发中最常用的输入组件之一。它不仅可以单独使用,还可以与其他 UI 组件(如 `TextInputLayout`)集成来增强用户体验。此外,借助 `SharedPreferences`,开发者能够轻松地保存和恢复用户输入的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值