您的位置:首页 > 移动开发 > Android开发

Android EditText

2015-08-27 00:44 495 查看
EditText 文本输入框

下面实现一个登录页面

主要利用EditText实现:
* 1.控制显示隐藏密码
* 2.监听EditText改变事件
* 3.控制EditText输入校验









main.xml 如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.kn_day03_3_edittext.MainActivity" >

<TextView android:id="@+id/textview1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_alignParentLeft="true"

android:layout_alignParentStart="true"

android:layout_marginTop="30dp"

android:layout_marginLeft="20dp"

android:layout_marginStart="20dp"

android:textSize="20sp"

android:text="用户名:" />

<TextView android:id="@+id/textview2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/textview1"

android:layout_alignRight="@+id/textview1"

android:layout_alignEnd="@+id/textview1"

android:layout_marginTop="20dp"

android:textSize="20sp"

android:text="密码:"/>

<!-- 基线解释:书写英语单词时为了规范书写会设有四条线,从上至下第三条就是基线。

基线对齐主要是为了两个控件中显示的英文单词的基线对齐。 -->

<EditText android:id="@+id/edittext1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignTop="@+id/textview1"

android:layout_toRightOf="@+id/textview1"

android:layout_toEndOf="@+id/textview1"

android:layout_alignBaseline="@+id/textview1"

android:layout_marginLeft="10dp"

android:layout_marginStart="10dp"

android:textSize="20sp"

android:hint="用户名/邮箱/手机号"

android:singleLine="true"

android:ems="10">

<!-- 请求焦点

获得焦点的输入框,默认光标闪烁,

默认弹出虚拟键盘

如果使用模拟器测试,不弹出虚拟键盘的解决方式:

如果是原生的模拟器~~确保模拟器创建的时候keyboard属性未勾选,

有勾选的不能显示虚拟键盘

如果第三方的模拟器~~打开Genymotion软件,找到模拟器,选择设置按钮,确保弹出窗口中

最下方的Uses Virtual keyboard for text input 选项有勾选上

-->

<requestFocus />

</EditText>

<!-- android:ems 设置EditText显示的时候默认的最小宽度

属性值:任意数字 代表的是最少要达到n个字节那么宽

android:hint属性用于设置输入框的默认提示

此提示的特点在于:输入框中有文字的话,显示文字,不显示提示

没有文字的话,就显示默认提示

android:textColorHint="" 可以默认提示字体的颜色

android:numeric="" 设置输入框仅输入数字

属性值:

signed 默认的

integer 整数

decimal 小数

或者通过android:inputType="number"属性也可以去设置当前的输入框

只能输入数字

精确去限制输入框中输入的内容:

android:digits ,输入框只能输入该条属性属性值中包含的文字内容,

如android:digits=“abc”则输入的值必须取自digits集合中的元素

设置输入框显示方式是密码的形式的:

android:password="true"

android:inputType = "textPassword"

-->

<EditText android:id="@+id/edittext2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_toRightOf="@+id/textview2"

android:layout_toEndOf="@+id/textview2"

android:layout_alignTop="@+id/textview2"

android:layout_alignBaseline="@+id/textview2"

android:layout_marginLeft="10dp"

android:layout_marginStart="10dp"

android:hint="只能输入数字"

android:inputType="number"

android:digits="1234567890"

android:password="true"

android:singleLine="true"

android:textSize="20sp" />

<Button

android:id="@+id/btn1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/edittext2"

android:layout_below="@+id/edittext2"

android:layout_marginTop="30dp"

android:onClick="login"

android:text="登录" />

<Switch

android:id="@+id/switch1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/textview2"

android:layout_below="@+id/btn1"

android:layout_marginLeft="30dp"

android:layout_marginTop="30dp"

android:textOn="显示密码"

android:textOff="隐藏密码"

/>

<!--

android:textOn="显示密码" 控制按钮在on状态的时候显示的文字内容

android:textOff="隐藏密码" 控制按钮在off状态的时候显示的文字内容

-->

</RelativeLayout>

EditText 的android:inputType属性有很多功能
<!-- android:inputType
功能:
大体上分3个方面
1.限制输入框中输入的内容
2.设置输入框中的内容显示的是密码的.
3.给弹出的虚拟键盘中添加一些针对某情况好用的按钮

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” 时间键盘

-->

MainActivity.java

package com.example.kn_day03_3_edittext;

import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.text.method.TransformationMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.Switch;
/**
* EditText学习
* @author KNOWN
* 要点:
* 1.控制显示隐藏密码
* 2.监听EditText改变事件
* 3.控制EditText输入校验
*/
public class MainActivity extends Activity {

EditText uname;
EditText upwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

uname = (EditText)findViewById(R.id.edittext1);
upwd = (EditText)findViewById(R.id.edittext2);

Switch s = (Switch)findViewById(R.id.switch1);
/**
* 1.控制显示隐藏密码
* 设置switch按钮状态改变的监听
*/
s.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
// 动态的改变输入框中密码的显示方式
// 如果密码.的显示是通过布局文件中
//android:password=“true”的属性实现的话
/* 通过setTransformationMethod方法实现
* HideReturnsTransformationMethod.getInstance() 代表获得一个对象,特点是:将.变成对应的文字 .->文字
* PasswordTransformationMethod.getInstance() 获得一个对象,该对象的特点是:将文字变成. 文字->.
*/
if (isChecked) {//显示密码被选中时执行
Log.i("switch", "on");
upwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
} else {//隐藏密码被选中时执行
Log.i("switch", "off");
upwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
//如果在xml中使用的是inputtype去控制的密码显示
/*if (isChecked) { //显示密码
upwd.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
} else { //隐藏密码
upwd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
}*/
}
});

//
/**
* 2.监听EditText改变事件
* 添加--文本框改变监控事件 监控输入框中输入内容的变化
* 注:当把鼠标点入输入框,到鼠标离开输入框,每输入一个字符都会出发内部的3个函数
*/
upwd.addTextChangedListener(new TextWatcher() {

/**
* 文字正在改变的时候运行
*/
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
Log.i("onTextChanged", "CharSequence s, int start, int before, int count:"+s+","+start+","+before+","+count);
}

/**
* 内容改变前会运行的方法
*
*/
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
Log.i("beforeTextChanged", "harSequence s, int start, int count,int after:"+s+","+start+","+count+","+after);
}

/**
* 文字改变后会运行的方法
* s 参数对应改变后的文字
*/
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Log.i("afterTextChanged", "Editable s:"+s.toString());
/*
* 3.控制EditText输入校验
* 需求:判断当前的输入框中输入的内容是否含有2,如果有的话,提示
* */
if(s.toString().contains("2")) {
upwd.setError("文字里有2了");
}
}
});
}
//登录事件
public void login(View v){
//验证用户名密码是否存在正确
String name = uname.getText().toString();
String pwd = upwd.getText().toString();
/*
* 连接数据库校验
* ....
*/
Log.i("login status", "login success!uname="+name+"&upwd="+pwd);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: