当前位置:

首页 > 系统应用 > 2.3.2 EditText(输入框)详解

2.3.2 EditText(输入框)详解

本节引言: 上一节已经讲过第一个 UI 控件TextView(文本框),也结合实际开发里常见的场景,整理了不少对应的处理办法,日常写业务时基本都能派上用场。这一节接着往下走,来看另一个使用频率同样很高的控件EditText(输入框)。它和 TextView 确实很像,但最关键的差别就在于:EditT

本文目录

    本节引言:

    上一节已经讲过第一个 UI 控件TextView(文本框),也结合实际开发里常见的场景,整理了不少对应的处理办法,日常写业务时基本都能派上用场。这一节接着往下走,来看另一个使用频率同样很高的控件EditText(输入框)。它和 TextView 确实很像,但最关键的差别就在于:EditText 能接收用户输入。还是沿用前面的思路,这里不按属性表逐项展开,而是直接聚焦实际应用;如果想细扣每个属性的细节,自己查 API 文档就够了:API文档;下面正式进入本节内容。

    1.设置默认提示文本

    如下图,相信你对于这种用户登录的界面并不陌生,是吧,我们很多时候都用的这种界面

    相比另外这种,下面这种又如何?

    还不赖是吧,当然,不会在这里贴布局,这里只介绍默认提示文本的两个控制属性:

    默认提示文本的两个属性如下:

    android:hint="默认提示文本"
    android:textColorHint="#95A1AA"

    前者设置提示的文本内容,后者设置提示文本的颜色!

    2.获得焦点后全选组件内所有文本内容

    当我们想在点击输入框获得焦点后,不是将光标移动到文本的开始或者结尾;而是 获取到输入框中所有的文本内容的话!这个时候我们可以使用selectAllOnFocus属性

    android:selectAllOnFocus="true"

    比如下面的效果图: 第一个是设置了该属性的,第二个是没设置该属性的,设置为true的EditText获得焦点后 选中的是所有文本!

    3.限制EditText输入类型

    有时我们可能需要对输入的数据进行限制,比如输入电话号码的时候,你输入了一串字母,这 显然是不符合我们预期的,而限制输入类型可以通过inputType属性来实现!

    比如限制只能为电话号码,密码(textPassword):

      

    可选参数如下:

    文本类型,多为大写、小写和数字符号

    android:inputType="none"  
    android:inputType="text"  
    android:inputType="textCapCharacters"  
    android:inputType="textCapWords"  
    android:inputType="textCapSentences"  
    android:inputType="textAutoCorrect"  
    android:inputType="textAutoComplete"  
    android:inputType="textMultiLine"  
    android:inputType="textImeMultiLine"  
    android:inputType="textNoSuggestions"  
    android:inputType="textUri"  
    android:inputType="textEmailAddress"  
    android:inputType="textEmailSubject"  
    android:inputType="textShortMessage"  
    android:inputType="textLongMessage"  
    android:inputType="textPersonName"  
    android:inputType="textPostalAddress"  
    android:inputType="textPassword"  
    android:inputType="textVisiblePassword"  
    android:inputType="textWebEditText"  
    android:inputType="textFilter"  
    android:inputType="textPhonetic" 

    数值类型

    android:inputType="number"  
    android:inputType="numberSigned"  
    android:inputType="numberDecimal"  
    android:inputType="phone"//拨号键盘  
    android:inputType="datetime"  
    android:inputType="date"//日期键盘  
    android:inputType="time"//时间键盘

    4.设置最小行,最多行,单行,多行,自动换行

    EditText默认是多行显示的,并且能够自动换行,即当一行显示不完的时候,他会自动换到第二行

    我们可以对其进行限制,比如
    设置最小行的行数:android:minLines="3"
    或者设置EditText最大的行数:android:maxLines="3"
    PS:当输入内容超过maxline,文字会自动向上滚动!!

    另外很多时候我们可能要限制EditText只允许单行输入,而且不会滚动,比如上面的登陆界面的 例子,我们只需要设置

    android:singleLine="true"

    即可实现单行输入不换行

    5.设置文字间隔,设置英文字母大写类型

    我们可以通过下述两个属性来设置字的间距:

    android:textScaleX="1.5"    //设置字与字的水平间隔
    android:textScaleY="1.5"    //设置字与字的垂直间隔

    另外EditText还为我们提供了设置英文字母大写类型的属性:android:capitalize 默认none,提供了三个可选值:

    • sentences:仅第一个字母大写
    • words:每一个单词首字母大小,用空格区分单词
    • characters:每一个英文字母都大写

    6.控制EditText四周的间隔距离与内部文字与边框间的距离

    我们使用margin相关属性增加组件相对其他控件的距离,比如android:marginTop = "5dp" 使用padding增加组件内文字和组件边框的距离,比如android:paddingTop = "5dp"

    7.设置EditText获得焦点,同时弹出小键盘

    关于这个EditText获得焦点,弹出小键盘的问题,前不久的项目中纠结了笔者一段时间 需求是:进入Activity后,让EditText获得焦点,同时弹出小键盘供用户输入! 试了很多网上的方法都不可以,不知道是不是因为笔者用的5.1的系统的问题! 下面小结下:

    首先是让EditText获得焦点与清除焦点的

    edit.requestFocus(); //请求获取焦点
    edit.clearFocus(); //清除焦点

    获得焦点后,弹出小键盘,笔者大部分时间就花在这个上:

    • 低版本的系统直接requestFocus就会自动弹出小键盘了
    • 稍微高一点的版本则需要我们手动地去弹键盘: 第一种:
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

    第二种:

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);     imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘  

    不知道是什么原因,上面这两种方法并没有弹出小键盘,笔者最后使用了:windowSoftInputMode属性解决了弹出小键盘的问题,这里跟大家分享下:

    android:windowSoftInputMode Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。
    这个属性能影响两件事情:
    【一】当有焦点产生时,软键盘是隐藏还是显示
    【二】是否减少活动主窗口大小以便腾出空间放软键盘

    说得直白一点,这里控制的其实就是两件事:一是界面拿到焦点时,键盘该怎么响应;二是当前 Activity 的窗口是否要缩小,给软键盘腾出位置。
    可选值如下,而且支持同时配置多个,中间用"|"隔开。
    stateUnspecified:软键盘状态不做明确指定,通常由系统自行选择一个合适的状态,或者沿用主题中的设置。
    stateUnchanged:当这个 activity 出现时,软键盘会保持上一个 activity 的状态不变,之前是隐藏就继续隐藏,之前是显示就继续显示。
    stateHidden:用户进入 activity 时,软键盘始终处于隐藏状态。
    stateAlwaysHidden:当该 Activity 的主窗口获得焦点时,软键盘也会一直保持隐藏。
    stateVisible:软键盘通常会显示出来。
    stateAlwaysVisible:用户进入 activity 时,软键盘始终会显示。
    adjustUnspecified:默认配置,一般交给系统决定窗口是调整大小,还是以其他方式处理。
    adjustResize:该 Activity 会主动调整界面尺寸,为软键盘预留出显示空间。
    adjustPan:当前窗口内容会自动上移,确保当前获得焦点的区域不被键盘挡住,用户始终能看到正在输入的内容。

    我们可以在AndroidManifest.xml为需要弹出小键盘的Activity设置这个属性,比如:

    然后在EditText对象requestFocus()就可以了~

    8.EditText光标位置的控制

    有时可能需要我们控制EditText中的光标移动到指定位置或者选中某些文本!
    EditText为我们提供了setSelection()的方法,方法有两种形式:


    一个参数的是设置光标位置的,两个参数的是设置起始位置与结束位置的中间括的部分,即部分选中!
    当然我们也可以调用setSelectAllOnFocus(true);让EditText获得焦点时选中全部文本!
    另外我们还可以调用setCursorVisible(false);设置光标不显示
    还可以调用getSelectionStart()和getSelectionEnd获得当前光标的前后位置

    9.带表情的EditText的简单实现

    相信大家对于QQ或者微信很熟悉吧,我们发送文本的时候可以连同表情一起发送,有两种简单的实现方式:

    1.使用SpannableString来实现
    2.使用Html类来实现
    这里笔者用的是第一种,这里只实现一个简单的效果,大家可以把方法抽取出来,自定义一个EditText;
    也可以自己动手写个类似于QQ那样有多个表情选择的输入框!

    看下效果图(点击添加表情即可完成表情添加):

    代码也很简单:

    public class MainActivity extends Activity {
        private Button btn_add;
        private EditText edit_one;
        @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            btn_add = (Button) findViewById(R.id.btn_add);
            edit_one = (EditText) findViewById(R.id.edit_one);
            btn_add.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    SpannableString spanStr = new SpannableString("imge");
                    Drawable drawable = MainActivity.this.getResources().getDrawable(R.drawable.f045);
                    drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
                    ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BASELINE);
                    spanStr.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    int cursor = edit_one.getSelectionStart();
                    edit_one.getText().insert(cursor, spanStr);
                }
            });
        }
    }

    PS:对了,别忘了放一个图片哦~

    10.带删除按钮的EditText

    我们常常在App的输入界面上看到:


    当我们输入内容后,右面会出现这样一个小叉叉的图标,我们点击后会清空输入框中的内容!
    实现起来其实也很简单:
    为EditText设置addTextChangedListener,然后重写TextWatcher()里的抽象方法,这个用于监听输入框变化的;然后setCompoundDrawablesWithIntrinsicBounds设置小叉叉的图片;最后,重写onTouchEvent方法,如果点击区域是小叉叉图片的位置,清空文本!

    实现代码如下:

    public class EditTextWithDel extends EditText {
    private final static String TAG = "EditTextWithDel";
        private Drawable imgInable;
        private Drawable imgAble;
        private Context mContext;
    public EditTextWithDel(Context context) {
            super(context);
            mContext = context;
            init();
        }
    public EditTextWithDel(Context context, AttributeSet attrs) {
            super(context, attrs);
            mContext = context;
            init();
        }
    public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            mContext = context;
            init();
        }
    private void init() {
            imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
            addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }
    @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
    @Override
                public void afterTextChanged(Editable s) {
                    setDrawable();
                }
            });
            setDrawable();
        }
    // 设置删除图片
        private void setDrawable() {
            if (length() < 1)
                setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
            else
                setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
        }
    // 处理删除事件
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (imgInable != null && event.getAction() == MotionEvent.ACTION_UP) {
                int eventX = (int) event.getRawX();
                int eventY = (int) event.getRawY();
                Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
                Rect rect = new Rect();
                getGlobalVisibleRect(rect);
                rect.left = rect.right - 100;
                if (rect.contains(eventX, eventY))
                    setText("");
            }
            return super.onTouchEvent(event);
        }
        @Override
        protected void finalize() throws Throwable {
            super.finalize();
        }
    }

    本节小结:

    本节给大家介绍了Android UI控件中的EditText(输入框)控件,用法有很多,当然上述情况肯定满足不了实际需求的,实际开发中我们可能需要根据自己的需求来自定义EditText!当然,这就涉及到了自定义控件这个高级一点的主题了,在进阶部分我们会对Android中的自定义控件进行详细的讲解!现在会用就可以了~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    Yandex浏览器官网登录与在线体验入口
    Yandex浏览器官网登录与在线体验入口

    Yandex浏览器官方网站登录入口是https://www.yondex.net/,提供多语言下载、账户同步、广告拦截、Turbo模式及隐私保护等功能,支持跨设备数据同步与安全浏览。

    2026年AO3镜像最新地址及稳定入口
    2026年AO3镜像最新地址及稳定入口

    ao3镜像2026最新入口包括主站archiveofourown.org、镜像站ao3mirror.com和xiaozhan.icu,建议收藏备用并根据网络情况切换使用。

    Win10搜索不到蓝牙耳机的排查与连接方法
    Win10搜索不到蓝牙耳机的排查与连接方法

    面向在Windows 10系统中无法发现蓝牙耳机的用户,本文提供从耳机配对模式到系统设置的完整排查路径。首先确保耳机已充电并进入可被搜索的配对状态,断开与其他设备的连接;随后在Win10设置中开启蓝牙并添加设备。若蓝牙开关缺失或适配器异常,需通过设备管理器检查驱动状态并更新,以恢复正常的蓝牙音频设备识别功能。

    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置
    Win10蓝牙耳机麦克风没声音?检查输入设备与权限设置

    面向在Windows 10系统中遇到蓝牙耳机能听声但无法录音的用户,本文解决因输入通道选择错误、隐私权限关闭或语音连接缺失导致的麦克风无声问题。关键步骤包括:在系统声音设置中正确选择Headset Microphone或Hands-Free AG Audio作为输入设备;在隐私设置中开启应用访问麦克风权限;确认蓝牙状态包含语音连接而非仅音乐连接,必要时重新配对或更新驱动。注意Stereo模式不支持麦克风输入,勿为音质牺牲通话功能。

    Win11打开服务管理器的两种方法:运行命令与计算机管理
    Win11打开服务管理器的两种方法:运行命令与计算机管理

    面向需要在Windows 11中查看或配置系统服务的用户,本文提供两种快速进入服务管理器的路径。一是通过Win+R运行services.msc直接打开,适合快速访问;二是从开始菜单进入计算机管理,再展开服务和应用程序找到服务列表,适合在统一管理界面中操作。文中说明查看状态通常无需特殊权限,而修改服务设置可能需要管理员账户,帮助用户根据实际需求选择合适入口。

    fences怎么彻底删除 清理残留文件
    fences怎么彻底删除 清理残留文件

    想知道Fences怎么彻底删除?本教程详解Windows 11下卸载Fences、使用官方Purge工具清理残留、删除布局备份及日志的步骤,助您干净移除软件并恢复桌面原生体验。

    Win11打开组策略的命令及家庭版无法使用说明
    Win11打开组策略的命令及家庭版无法使用说明

    面向需要在Windows 11中调整系统设置的用户,介绍通过运行命令gpedit.msc快速打开本地组策略编辑器的方法。该功能仅内置于专业版、企业版和教育版,家庭版通常不包含此工具,运行报错并非系统故障。本文详解正确的命令输入格式、界面确认方式以及通过任务栏搜索的替代路径,并指导家庭版用户如何查看系统版本以选择对应的设置入口或升级方案。

    Win11家庭版找不到组策略编辑器怎么办
    Win11家庭版找不到组策略编辑器怎么办

    面向使用Windows 11家庭版或家庭中文版的用户,解决运行gpedit.msc提示找不到文件的问题。该现象源于版本功能限制,修改文件名或重装同版本系统均无效。本文指导用户先通过“设置-关于”确认系统版本,日常配置优先在“设置”应用中完成;若确需本地组策略功能,建议通过官方渠道升级至专业版,并警示避免使用来源不明的第三方安装工具。

    fences怎么退出 关闭后台运行程序
    fences怎么退出 关闭后台运行程序

    想让 Fences 暂时停止接管桌面?本文详解 Windows 11/10 下关闭 Fences 总开关、禁用开机启动及验证后台状态的操作步骤,区分临时停用与彻底卸载,确保桌面文件安全。

    电脑黑屏图片有哪些类型?纯黑壁纸与故障画面辨别方法
    电脑黑屏图片有哪些类型?纯黑壁纸与故障画面辨别方法

    分不清电脑黑屏是设置了纯黑壁纸还是系统故障?本文详解纯黑壁纸的视觉特征与故障黑屏的区别,提供Windows和Mac系统的纯黑壁纸设置方法,助你快速判断屏幕状态。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。