前言

  上一篇博客介绍了Android的TextView控件,这篇博客来说一下EditText控件。EditText为一个文本控件,提供了文本输入的功能,而且继承自TextView,可以理解为可以输入的TextView。因为继承的关系,很多TextView可以用到的方法,在EditText都可以用到。

EditText

  对于EditText,在很多平台上都有用到,最大的用处就是供用户输入一些信息,所以主要的方法就两个:

  • setText():设置TextView控件中显示的内容。
  • getText() 获取TextView控件中显示的内容。

示例程序

  现在通过两个示例程序,来讲解一下EditText的使用。

  第一个例子,在EditText中插入表情图片,无论是开发任何系统,这个都是常用的实现。在编码之前,需要找到一些表情图片的资源,我这里就随机找了十张图片,注意资源文件的文件名必须是小写的,放在/res/drawable文件夹下。这样在清单文件R中,就可以看到与Drawable资源对于的资源清单ID,对于在清单文件中的资源,可以通过R类访问,但是访问到的为一个int类型的资源ID,如果需要访问详细内容,需要使用getResource()方法访问到所有的资源,在其中有特定资源的访问方法。关于资源清单文件R,以后再进行详细讲解。

  在Android中,使用图片资源会用到一个Bitmap的类,此类代表一个位图资源,是一个final类,需要使用BitmapFactory类的静态方法decodeXxx()转化获得,此静态方法有多种重载模式,可以适应不同的资源来源。

  下面直接上代码,对于布局而言,很简单的只有两个控件:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <EditText
android:id="@+id/edImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"/> <Button
android:id="@+id/btnInImg"
android:text="添加表情"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

  实现InImageActivity.java代码:

 package cn.bgxt.androiduiedittext;

 import java.util.Random;

 import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.Button;
import android.widget.EditText; public class InImageActivity extends Activity { private Button btnInImg;
private EditText edImage;
//获取Drawable资源的Id数组
private final int[] DRAW_IMG_ID=
{
R.drawable.image0,
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
R.drawable.image9
};
public InImageActivity() {
// TODO Auto-generated constructor stub
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edittextinimg_activity); btnInImg=(Button)findViewById(R.id.btnInImg);
edImage=(EditText)findViewById(R.id.edImage); btnInImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 参数一个0-9的随机数
int random=new Random().nextInt(9);
//通过bitmapFactory获得位图资源
Bitmap bit=BitmapFactory.decodeResource(getResources(), DRAW_IMG_ID[random]);
//一个ImageSpan,用于插入的存放待插入的图片
ImageSpan imageSpan=new ImageSpan(InImageActivity.this,bit);
SpannableString spannableString=new SpannableString("img");
spannableString.setSpan(imageSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
edImage.append(spannableString);
}
}); } }

  显示效果,点击按钮随机添加标签:

  

  既然EditText主要是用来获取用户输入的信息的,那么第二个例子就来讲讲用户输入时候内容的验证吧。在XML Attribute中,有一些属性可以设置输入验证的范围内容,不过此为TextView类的属性,因为TextView无法输入,此处在EditText中讲解说明。

  • android:digits:指定特定能被输入的字符。
  • android:inputType:设定输入的类型,下面仅介绍一些常用的,多项可以使用“|”分割。
    • textUri:必须是一个URL。
    • textEmailAddress:Email地址
    • textPassword:密码。
    • number:数字。
  • android:numeric:指定数字输入类型,多项可以使用“|”分割。
    • integer:数字。
    • decimal:浮点类型。
    • signed:带符号。

  以上属性仅仅是为了限制用户的输入,还有一些输入需要给用户以提示错误信息。这里将使用到setError()方法,如果设定了错误提示信息,会在EditText旁边以感叹号的形式显示。

  布局代码:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Android:digits属性(仅输入数字与abcde)" /> <EditText
android:id="@+id/etNum"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:digits="123456789abcde"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Android:inputtype属性(仅输入Email)" /> <EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:inputType="textPassword"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用Android:inputtype属性(仅输入密码)" /> <EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:numeric="decimal|signed"
/>
<Button
android:id="@+id/btnValidation"
android:text="验证第一个输入框是否为123"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>

  Java代码: 

 package cn.bgxt.androiduiedittext;

 import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText; public class EditValidationActivity extends Activity { private Button btnValidation;
private EditText etNum;
public EditValidationActivity() {
// TODO Auto-generated constructor stub
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.editvalidation_activity);
btnValidation=(Button)findViewById(R.id.btnValidation);
etNum=(EditText)findViewById(R.id.etNum); btnValidation.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num=etNum.getText().toString().trim();
if(!num.equals("123"))
{
etNum.setError("请输入123");
}
}
}); }
}

  效果展示:

  如果点击验证按钮,而第一个文本框输入的不是123,则提示错误信息:

  示例代码下载

总结

  以上就讲解了EditText在实际项目中常用的效果,虽然大部分使用的是TextView的属性设置的效果,但是Android下还有一些其他的供用户输入的控件,可以使用,所以才以这样的继承结构实现属性。

  请支持原创,尊重原创,转载请注明出处。谢谢。

Android--UI之EditText的更多相关文章

  1. Android UI系列-----EditText和AutoCompleteTextView

    在这篇随笔里将主要讲解一下EditText和AutoCompleteTextView这个控件 1.EditText 首先我们先简单来说说EditText这个控件,这个就相当于我们平常web开发中的文本 ...

  2. Android经常使用UI包裹 - EditText

    EditText的信息接受用户输入是最重要的Android UI包裹,您可以使用EditText.getText()获取它的文本内容. 实例:EditTextDemo 执行效果: watermark/ ...

  3. 【Android 应用开发】Android UI 设计之 TextView EditText 组件属性方法最详细解析

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . TextView 相关类的继承结构 ...

  4. Android UI 设计之 TextView EditText 组件属性方法最详细解析

    . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . TextView 相关类的继承结构 ...

  5. Android UI系列-----时间、日期、Toasts和进度条Dialog

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  6. android UI库

    https://github.com/wasabeef/awesome-android-ui List of Android UI/UX Libraries A curated list of awe ...

  7. Android UI基础教程 目录

    从csdn下载了这本英文版的书之后,又去京东搞了一个中文目录下来.对照着看. 话说,这本书绝对超值.有money的童鞋看完英文版记得去买中文版的~~ Android UI基础教程完整英文版 pdf+源 ...

  8. 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog

    原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...

  9. 【转】Android UI 五种布局

    在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用 ...

  10. GitHub上受欢迎的Android UI Library

    GitHub上受欢迎的Android UI Library 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 下拉刷新 Vi ...

随机推荐

  1. angularJS中-$route路由-$http(ajax)的使用

    后台请求使用的是nodeJS驱动(后面帖代码),很简单的RESTFUL, 页面使用的是bottstarp3.0(懒人神器); 第一个例子: 在本地架设NODEJS, angular的所有请求都是请求本 ...

  2. 第一节Unity3D简介

    Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎.Unity ...

  3. 页面无法访问 css文件加载问题

    1.青奥项目的web配置: 后缀为.html和.vm的请求会被控制器拦截.  控制器没设置目标资源,所以无法访问到资源! 2.文件不能放在vm文件夹下,因为设置了视图解析,vm文件夹下的文件只有后缀为 ...

  4. Java继承中属性、方法和对象的关系

    大家都知道子类继承父类是类型的继承,包括属性和方法!如果子类和父类中的方法签名相同就叫覆盖!如果子类和父类的属性相同,父类就会隐藏自己的属性! 但是如果我用父类和子类所创建的引用指向子类所创建的对象, ...

  5. java web名词解释

    来源于:http://www.cnblogs.com/yxnchinahlj/archive/2012/02/24/2366110.html PO(persistant object) 持久对象 在o ...

  6. oracle-2中commit 详解

    博文转自:http://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉.commit在数据库编程的时候很常用,当你执行DML操 ...

  7. poj3107 树形dp

    好久没更了.前段时间去ec-final,实力水一波,混了个铜,虽然很弱,但是可以算是对之前一段时间的回报吧. 现在每天忙着复习,逃课太多,啥都不会...不想挂科啊!!Orz... 题意(简化):警察想 ...

  8. Java基础-静态代理与动态代理比较

    JAVA的静态代理与动态代理比较 静态代理类: 由程序员创建或由特定工具自动生成源代码,再对其编译.在程序运行前,代理类的.class文件就已经存在了.动态代理类: 在程序运行时,运用反射机制动态创建 ...

  9. Java 并发-任务执行.

    首先来看一下,任务的定义: 所谓的任务,就是抽象,离散的工作单位.你可以简单理解为代码级别的 (Runnable接口) 大多数并发应用程序都是围绕着任务进行管理的. 看一小段代码: package c ...

  10. Java编程思想学习(十六) 并发编程

    线程是进程中一个任务控制流序列,由于进程的创建和销毁需要销毁大量的资源,而多个线程之间可以共享进程数据,因此多线程是并发编程的基础. 多核心CPU可以真正实现多个任务并行执行,单核心CPU程序其实不是 ...