EditText

作为一个菜鸟,今天记录一下EditText你不知道的那些事:
一 、imeOptions 属性

 <EditText
        android:id="@+id/editText"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:imeOptions="actionSearch"
     />

虽然通常输入法软键盘右下角会是回车按键

但我们经常会看到点击不同的编辑框,输入法软键盘右下角会有不同的图标

点击浏览器网址栏的时候,输入法软键盘右下角会变成“GO”或“前往”

而我们点击Google搜索框,输入法软键盘右下角会变成 放大镜 或者“搜索”

而决定这个图标的变换的参数就是EditText中的 Android:imeOptions

android:imeOptions的值有actionGoactionSendactionSearchactionDone等,这些意思都很明显

而其在Java代码中对应的值为EditorInfo.IME_ACTION_XXX

在代码中通过editText.setOnEditorActionListener方法添加相应的监听,因为有些action是需要在代码中添加具体的相关操作的

EditText editText = (EditText) contentView.findViewById(R.id.editText);
        editText.setOnEditorActionListener(new OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    Toast.makeText(getActivity(), "1111111",Toast.LENGTH_SHORT).show();
                }

                return false;
            }
        });

然而当我们设置这一切后,却发现点击输入框,输入法键盘完全没变化,还是回车键

这并不是上面的属性和方法无效,而是我们还需要设置别的属性来使它们生效

经过试验 设置下面两个属性中的一个即可使这个属性生效(应该还有其他的属性也可以,没去试验)

1 将singleLine设置为true

2 将inputType设置为text

<EditText  
      android:id="@+id/editText"  
      android:layout_width="200dp"  
      android:layout_height="wrap_content"  
      android:imeOptions="actionSearch"  
      android:singleLine="true"  
      android:inputType="text"  
   />

java代码设置

    editText.setImeOptions(EditorInfo.IME_ACTION_SEARCH);  
    editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);  
    editText.setSingleLine(true);  

这里写图片描述

二、android 之EditText长按屏蔽ActionMode context菜单但保留选择工具功能
最近项目要求屏蔽EditText 长按出来的ActionMode菜单,但是要保留选择文本功能。这个屏蔽百度会出现各种方法,这里说一下我的思路:

1.屏蔽百度可知setCustomSelectionActionModeCallback即可,

editTextExt.setCustomSelectionActionModeCallback(new Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
//这里可以添加自己的菜单选项(前提是要返回true的)
return false;//返回false 就是屏蔽ActionMode菜单
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
})

以上方式经过测试可以取消 editText长按弹出的上下文菜单,但是同时选择文本的工具也不能用了,这个百度了很久没找到答案(有的说重写onTouchEvent方法在里边自己实现选择文本功能,我试了1.实现麻烦 2用户体验不好查看源码可以看到里边有很多东西的)所以决定看看源码看看goole是怎么实现actionMode菜单的。更多查看http://blog.youkuaiyun.com/nn955/article/details/46333459

更多其他Edittext介绍请看http://blog.youkuaiyun.com/shangmingchao

### 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、付费专栏及课程。

余额充值