Android修行手册-EditText属性以及光标和小键盘控制

举报
芝麻粒儿 发表于 2022/04/06 11:30:34 2022/04/06
【摘要】 本文约8.6千字,新手阅读需要13分钟,复习需要6分钟 【收藏随时查阅不再迷路】 👉关于作者众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)有什么需要欢迎私我...

本文约8.6千字,新手阅读需要13分钟,复习需要6分钟收藏随时查阅不再迷路

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉前提

这是小空坚持写的Android新手向系列,欢迎品尝。

大佬(×)

新手(√)

👉实践过程

今天我们继续学习EditText-她是程序和用户进行交互极其重要的控件。所有的App关于输入和编辑内容基本都用的这个控件来进行处理,基于该控件又封装了搜索,登录,输入限制,聊天框,内容编辑等组件。

EditText继承自TextView,所以拥有TextView的“全部”功能,让我们抓紧领略下EditText的神奇吧。

在布局中我们先简单看下:

<EditText
    android:layout_width="160dp"
    android:layout_height="wrap_content"
    android:textColor="#ff0000"
    android:hint="芝麻粒儿提醒请输入您的内容" />

image.png

细心的你运行后一定发现,浅灰色内容默认显示,当输入真正内容的时候就自动消失了。没错,那是友好型提示文本。Android发展到现在,这已经是基操了。而且也不用我们多做什么逻辑,只需要一个属性即可实现【android:hint=""】,剩下的系统自动处理,很方便。

😜属性介绍

上面也说了该控件继承自TextView,所以属性操作和TextView一致,关于TextView都有哪些属性,可以去看小空关于TextView的介绍,里面列举说明了基本所有属性。我们在此讲一些常用属性。

android:textStyle=“bold” :设置文本样式,bold(粗体), italic(斜体), bold|italic(粗斜体)
android:textColorHighlight="":设置选中文本的颜色
android:textScaleX="1.5":设置水平方向字与字之间的间距
android:textScaleY="1.5":设置垂直方向字与字之间的间距
android:typeface="monospace" :设置文本的字体,monospace:等宽字体,sans:无衬线字体,serif:衬线,normal:普通字体。
android:textColorHint="":设置提示文本Hint的文本颜色
android:selectAllOnFocus:设置输入框获取焦点后是否选中所有文本,当为true的时候选中所有文本,默认为false。


输入类型限制是很常用的了,比如仅仅显示数字,或者密码类型,也能减少bug产出。

重点声明:以下属性针对Android原生系统和输入法是都支持的,针对国内系统和三方输入法有些属性是失效的。所以小空在这只列举常用的属性,小心别进坑了。

android:inputType="none":EditText无限制,可以任意输入
android:inputType="text":任何文本,等同于none
android:inputType="textMultiLine":多行输入,该属性会导致android:imeOptions属性失效
android:inputType="textUri":网址类型
android:inputType="textEmailAddress":电子邮件类型
android:inputType="textPersonName":人名类型
android:inputType="textPostalAddress":地址类型
android:inputType="textPassword":密码类型
android:inputType="textVisiblePassword":可见密码类型
android:inputType="textWebEditText":网页变淡文本
android:inputType="number":数字类型
android:inputType="numberSigned": 带符号数字格式
android:inputType=“numberDecimal” :带小数点的浮点格式
android:inputType=“phone” :拨号键盘类型
android:inputType=“datetime” :时间日期类型
android:inputType=“date” :日期键盘类型
android:inputType="time" :时间键盘类型
android:digits="0123456789":设置只能显示哪些字符,如果内容较多不适用


输入的时候控制键盘(回车键/确认键)的不同行为,该属性同上面一样,针对官方的输入法适用,但国内有很多不同的三方输入法,不一定有效,不过自定义键盘的时候会用到。

android:imeOptions=“flagNoExtractUi” :使软键盘不全屏显示,只占用一部分屏幕 同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
android:imeOptions=“actionNone” :输入框右侧不带任何提示
android:imeOptions=“actionGo” :右下角按键内容为’开始’
android:imeOptions=“actionSearch” :右下角按键为放大镜图片,搜索
android:imeOptions="actionSend":右下角按键内容为’发送’字样
android:imeOptions=“actionNext” :右下角按键内容为’下一步’ 或’下一项’ 字样
android:imeOptions=“actionDone” :右下角按键内容为’完成’字样

😜小键盘控制

一旦涉及输入框,那么小键盘一定少不了,在业务开发的过程中会针对小键盘隐藏显示等做出对应的措施,或者自定义键盘的业务功能都需要该技术。

在AndroidMinifest.xml的【activity】中设置属性【windowSoftInputMode】即可。
image.png
stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置,也就是小键盘的默认值,当输入组件EditText获取焦点的时候才会弹出
stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示,举例,该页面A是隐藏键盘,跳转页面B后,键盘也是隐藏的。
stateHidden:用户选择activity时,软键盘总是被隐藏
stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
stateVisible:软键盘通常是可见的
stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态,不管有没有输入框。
adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示,并且会调整布局进而使输入内容始终可见
adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan:当前窗口的内容将自动移动以便当前焦点控件不被键盘覆盖和用户能总是看到输入内容的部分。
上面的属性使用过程中同样不是唯一性,可联合使用。

android:windowSoftInputMode=“adjustResize|stateAlwaysHidden”

😜光标

默认光标位置是在最后显示的,这也是对用户较好的体验形式。但同时官方仍然给了我们更多的自由空间。

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test_edit);
    //随着Android的发展,现在findViewById已经淡出了人们的视线
    EditText testEditText = findViewById(R.id.testEditText);
    //设置光标的显示位置,一般默认即可
    testEditText.setSelection(0);
    //设置光标是否可见
    testEditText.setCursorVisible(false);
    //获取当前光标的前后位置
    testEditText.getSelectionStart();
    testEditText.getSelectionEnd();
}

😜明文密文

很多App业务中都需要密码输入,有的产品会在密码旁边有个【眼睛】的图标,展示可展示密码明文或回复密文。这都是程序中用代码控制的。

EditText testEditText = findViewById(R.id.testEditText);

//显示明文密码

testEditText.setTransformationMethod(new HideReturnsTransformationMethod());

//隐藏密码 就是密文显示 都是 *** 号

testEditText.setTransformationMethod(new PasswordTransformationMethod());

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:
https://zhima.blog.csdn.net/
https://www.zhihu.com/people/zhimalier
https://juejin.cn/user/4265760844943479
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。