Android入门之路 - TextView、EditText属性大全

此篇内容主要来源于我自己在开发中遇到的常见问题,特此总结一番方便自己查阅与帮助他人 > <

EditText相关Blog

  • TextView、EditText属性大全
  • 监听EditText的文本变化
  • 设置EditText光标颜色与下划线颜色
  • EditText禁止输入表情符号
  • EditText一键清除内容

主要包含了 EditTextTextView 基础属性,以及常见的 单行显示、多行显示 、字间距、行间距、文末省略号设置、键盘显示与隐藏、以及调试阶段用到了不可输入表情等功能 ~

    • 共性属性
      • 视图开发(预览)
      • 基础属性
      • 居中属性
    • 实战属性
      • 单行、多行显示
      • 末尾为...
        • 单行显示,末尾为...
        • 固定多行行数,末尾为...
        • 限制字数,末尾为...
      • 字距、行距
        • 字距
        • 行距
    • TextView专用属性
      • 字体样式(标准、加粗)
      • 同串多效果(富文本)
    • EditText专用属性
      • EditText 自动弹出键盘与隐藏键盘
        • 显示软键盘
        • 隐藏软键盘
      • InputType类型限制
        • xml 内设置
        • 代码动态设置
        • 代码中使用

共性属性

视图开发(预览)

只在XML中显示,运行在手机上不进行显示

Tip:关于这部分内容,之后我会单独剥离重新梳理一篇

在正式开发中,有一些控件的属性,我们可能会在测试阶段才发现会使用到,因为UI要一致!

  • 最外层布局添加命名空间
	xmlns:tools="http://schemas.android.com/tools"
  • 然后在Text中设置属性,如
    <TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"tools:text="预览模式" />

基础属性

宽高:match_parent、wrap_content或自定义尺寸

<TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"text="text的属性使用"android:textSize="" />

居中属性

当前布局(针对自身布局 )

//自身宽度
android:layout_width="match_parent"//俩者区别 :针对当前控件
android:gravity="center"

当前布局(针对父布局 )

//自身宽度
android:layout_width="wrap_content"//俩者区别 : 针对父控件
android:layout_gravity="center"

实战属性

此部分主要包含在项目中常见的一些适配场景,在UI验收阶段经常需要处理这类型的问题,可以算是基础属性的一次小进阶

单行、多行显示

单行显示

  • 方式 1
 android:singleLine="true"
  • 方式 2
 android:maxLines="1"

多行显示

 android:maxLines="自行在此处输入限制行数"

末尾为…

具体使用哪种显示方式主要有产品、UI确定,我们需要掌握的就是在以下场景中如何满足需求方提出的需求即可~

单行显示,末尾为…

 android:singleLine="true"android:ellipsize="end"

固定多行行数,末尾为…

//超过三行末尾显示省略号android:maxLines="3"android:ellipsize="end"

限制字数,末尾为…

有时候我们也通过限制字数显示的方式,来实现UI效果

android:maxEms="21"
android:maxLines="3"
android:ellipsize="end"

字距、行距

23年的时候,正好又用到了相关属性,发现自己有记录过,所以来修整一下

设置字距、行距后 效果

在这里插入图片描述

伪代码

    <TextViewandroid:id="@+id/desc"tools:text="近期市场表现较活跃的行业;随着市场风格切换,行业轮动可能频繁,收益风险比较大,建议适量配置。"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:ellipsize="end"android:enabled="false"android:letterSpacing="0.05"android:lineSpacingExtra="2dp"android:maxLines="2"android:paddingHorizontal="8dp"android:paddingVertical="4dp"android:textColor="#999999"android:textSize="10sp" />

字距

通过设置 android:letterSpacing 属性从而设置水平方向文本的字间距

  • xml
 android:letterSpacing="0.05"
  • 代码中动态设置
 textView.setLetterSpacing(0.05);

行距

通过设置TextView属性中 android:lineSpacingExtraandroid:lineSpacingMultiplier 来达到行间距效果

设置行间距 android:lineSpacingExtra

 android:lineSpacingExtra="2dp"

设置行间距的倍数 android:lineSpacingMultiplier

所想:虽未看源码,但是个人感觉系统默认提供了行距,而通过该方式修改行距倍数是针对于默认值,并非像上方设置的行距值

 android:lineSpacingMultiplier='1.2'

当然也可以一起使用,但我感觉意义好像不大,具体主要还是看调试的页面场景吧

 android:lineSpacingExtra=""android:lineSpacingMultiplier="" 

TextView专用属性

字体样式(标准、加粗)

字体风格包含斜体、加粗、无效果(我常用的只有一个加粗效果)

//字体加粗
android:textStyle="bold"

如未设置此属性,系统默认其实写下了normal样式

android:textStyle="normal"

有时我们需动态改变TextView的textStyle,直接通过控件调用setTypeface方法

setTypeface(Typeface.defaultFromStyle(Typeface.风格样式));

同串多效果(富文本)

关于同串多效果的操作我有一篇更详细的blog,大家尽可前往 一个String字符串的万种样式 ~

同串多风格也就证明当前的字符串内有多种字体效果

因为有风格效果,所以我们创建俩个字体style放置于styles.xml 中

   <style name="textStyle_blue">"android:textSize">13dp"android:textColor">#4d7baestyle><style name="textStyle_red">"android:textSize">16dp"android:textColor">#f00000"android:textStyle">italicstyle>

使用时一般新建SpannableString进行赋值,然后将设置效果塞到对应的TextView中即可

   //需要组装的内容SpannableString styledText = new SpannableString("EveryBaby");//样式1 - 呈现效果 Every 为13sp、蓝色styledText.setSpan(new TextAppearanceSpan(this, R.style.textStyle_blue), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//样式2 - 呈现效果 Baby 为16sp、红色、斜体styledText.setSpan(new TextAppearanceSpan(this, R.style.textStyle_red), 5, styledText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//将组装好的效果设置到对应的TextView控件中mDisplay.setText(styledText);

扩展内容

其中主要用到了setSpan的方法,针对此项科普一番 ~

setSpan主要作用于SpannableString或SpannableStringBuilder特定范围的字符串的样式设置,可以设置多个(多种)效果(字体大小、颜色、样式)

参数分析
SetSpan() - void setSpan(Object what,int start,int end,int flags)

  • object what
    对应的各种Span,后面会提到

  • int start
    开始应用指定Span的位置,索引从0开始

  • int end
    结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效

  • int flags

取值如下

flag含义
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
Spannable.SPAN_EXCLUSIVE_INCLUSIVE前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
Spannable.SPAN_INCLUSIVE_EXCLUSIVE前面包括,后面不包括
Spannable.SPAN_INCLUSIVE_INCLUSIVE前后都包括

EditText专用属性

EditText 自动弹出键盘与隐藏键盘

AndroidMainfest中在对应的Activity进行属性设置

显示软键盘

//显示软键盘
android:windowSoftInputMode="stateVisible|adjustResize"

如:

 <activityandroid:name=".mine.activity.FeedBackActivity"android:windowSoftInputMode="stateVisible|adjustResize"/>

隐藏软键盘

//隐藏软键盘
android:windowSoftInputMode="stateHidden|adjustResize"

如:

  <activityandroid:name=".mine.activity.FeedBackActivity"android:windowSoftInputMode="stateHidden|adjustResize"/>

InputType类型限制

xml 内设置

   //输入类型为没有指定明确的类型的特殊内容类型android:inputType="none"//输入类型为普通文本android:inputType="text"//输入类型为数字文本android:inputType="number"//输入类型为电话号码android:inputType="phone"//输入类型为日期和时间android:inputType="datetime"//输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个日期。android:inputType="date"//输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个时间。android:inputType="time"//输入类型为小数数字,允许十进制小数点提供分数值。android:inputType="numberDecimal"//输入类型为数字是带符号的,允许在开头带正号或者负号android:inputType="numberSigned"//输入类型为数字密码android:inputType="numberPassword"//输入类型为自动完成文本类型android:inputType="textAutoComplete"//输入类型为自动纠正文本类型android:inputType="textAutoCorrect"//输入类型为所有字符大写android:inputType="textCapCharacters"//输入类型为每句的第一个字符大写android:inputType="textCapSentences"//输入类型为每个单词的第一个字母大写android:inputType="textCapWords"//输入法多行文本android:inputType="textImeMultiLine"//进行输入时,输入法无提示android:inputType="textNoSuggestions"//输入一个短的,可能是非正式的消息,如即时消息或短信。android:inputType="textShortMessage"//输入长内容,可能是正式的消息内容,比如电子邮件的主体android:inputType="textLongMessage"//输入文本以过滤列表等内容android:inputType="textFilter"//输入一个电子邮件地址android:inputType="textEmailAddress"//输入电子邮件主题行android:inputType="textEmailSubject"//输入一个密码android:inputType="textPassword"//输入对用户可见的密码android:inputType="textVisiblePassword"//输入人的姓名android:inputType="textPersonName"//输入邮寄地址android:inputType="textPostalAddress"//输入语音发音输入文本,如联系人拼音名称字段android:inputType="textPhonetic"//输入URIandroid:inputType="textUri"//输入网页表单中的文本android:inputType="textWebEditText"//输入网页表单中的邮件地址android:inputType="textWebEmailAddress"//输入网页表单中的密码android:inputType="textWebPassword"

代码动态设置

  	//对应的EditTextEditText editText;//输入类型为没有指定明确的类型的特殊内容类型editText.setInputType(InputType.TYPE_NULL);//输入类型为普通文本editText.setInputType(InputType.TYPE_CLASS_TEXT);//输入类型为数字文本editText.setInputType(InputType.TYPE_CLASS_NUMBER);//输入类型为电话号码editText.setInputType(InputType.TYPE_CLASS_PHONE);//输入类型为日期和时间editText.setInputType(InputType.TYPE_CLASS_DATETIME);//输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,允许输入日期和时间。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);//输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个日期。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);//输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个时间。editText.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME);//输入类型为决定所给文本整体类的位掩码editText.setInputType(InputType.TYPE_MASK_CLASS);//输入类型为提供附加标志位选项的位掩码editText.setInputType(InputType.TYPE_MASK_FLAGS);//输入类型为决定基类内容变化的位掩码editText.setInputType(InputType.TYPE_MASK_VARIATION);//输入类型为小数数字,允许十进制小数点提供分数值。editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);//输入类型为数字是带符号的,允许在开头带正号或者负号editText.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);//输入类型为{@link#TYPE_CLASS_NUMBER}的缺省变化值:为纯普通数字文本editText.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL);//输入类型为{@link#TYPE_CLASS_NUMBER}的缺省变化值:为数字密码editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);//输入类型为自动完成文本类型editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);//输入类型为自动纠正文本类型editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);//输入类型为所有字符大写editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);//输入类型为每句的第一个字符大写editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);//输入类型为每个单词的第一个字母大写editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);//输入多行文本editText.setInputType(InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);//进行输入时,输入法无提示editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);//输入一个短的,可能是非正式的消息,如即时消息或短信。editText.setInputType(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE);//输入长内容,可能是正式的消息内容,比如电子邮件的主体editText.setInputType(InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);//输入文本以过滤列表等内容editText.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER);//输入一个电子邮件地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);//输入电子邮件主题行editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);//输入一个密码editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);//输入老式的普通文本editText.setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL);//输入人名editText.setInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);//输入邮寄地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);//输入语音发音输入文本,如联系人拼音名称字段editText.setInputType(InputType.TYPE_TEXT_VARIATION_PHONETIC);//输入URIeditText.setInputType(InputType.TYPE_TEXT_VARIATION_URI);//输入对用户可见的密码editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);//输入网页表单中的文本editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);//输入网页表单中的邮件地址editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS);//输入网页表单中的密码editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD);

代码中使用

单个类型设置

 editText.setInputType(InputType.TYPE_CLASS_TEXT);

多个类型设置 (使用 | 进行连接)

 editText.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部