一、EditText介绍
①EditText是一个输入框,在Android开发中是常用的控件。也是获取用户数据的一种方式。
②EditText是TextView的子类,它继承了[TextView]的所有属性。
二、常用属性
属性 | 介绍 |
---|---|
android:background="@drawable/bg" |
设置背景(如果背景透明,则将@drawable/bg 改为@null ) |
android:layout_marginRight="50dp" |
设置外间距 |
android:paddingLeft="80dp" |
设置内间距 |
android:textColor = "#ff8c00" |
设置字体颜色 |
android:textSize="30sp" |
设置字体大小 |
android:hint="请输入密码" |
设置显示在空间上的提示信息 |
android:textColorHint="#999999" |
设置提示文本的颜色(默认为灰色) |
android:lines=“1” |
设置文本的行数,设置两行就显示两行,即使第二行没有数据 |
android:maxLines="1" |
设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示 |
android:minLines=“1” |
设置文本的最小行数,与lines 类似 |
android:inputType="textPassword" |
设置文本的类型,用于帮助输入法显示合适的键盘类型(此处键盘输出类型为“..... ”) |
android:maxLength="6" |
限制显示的文本长度,超出部分不显示 |
android:imeOptions="actionGo" |
附加功能,设置右下角IME 动作与编辑框相关的动作,如actionDone 右下角将显示一个“完成”,而不设置默认是一个回车符号 |
android:textAlign="center" |
EditText 没有这个属性,但TextView 有,居中 |
android:singleLine="true" |
设置单行输入,一旦设置为true ,则文字不会自动换行 |
android:password="true" |
设置只能输入密码 |
android:editable="true" |
设置是否可编辑,true :可编辑 false :不可编辑 |
android:cursorVisible=false |
设置光标显示(true )/隐藏(false ) |
三、常用方法
1.文本监听事件
editText.addTextChangedListener(new TextWatcher() {
2 @Override
3 public void onTextChanged(CharSequence text, int start, int before, int count) {
4 //text 输入框中改变后的字符串信息
5 //start 输入框中改变后的字符串的起始位置
6 //before 输入框中改变前的字符串的位置 默认为0
7 //count 输入框中改变后的一共输入字符串的数量
8
9 }
10
11 @Override
12 public void beforeTextChanged(CharSequence text, int start, int count,int after) {
13 //text 输入框中改变前的字符串信息
14 //start 输入框中改变前的字符串的起始位置
15 //count 输入框中改变前后的字符串改变数量一般为0
16 //after 输入框中改变后的字符串与起始位置的偏移量
17
18 }
19
20 @Override
21 public void afterTextChanged(Editable edit) {
22 //edit 输入结束呈现在输入框中的信息
23
24 }
25 });
使用:实现文本输入个数只有6个
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//获取目前输入的个数
int len=charSequence.toString().length();
if(len>6){
//将最后一个删除掉
//只要前面6个
et.setText(charSequence.subSequence(0,6));
//让光标定到最后
et.setSelection(6);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
2.监听键盘事件的集中方式
-
1.创建匿名类对象
1.1创建一个类管理事件
PXDListener pl = new PXDListener();
et.setOnEditorActionListener(pl);
//或
et.setOnEditorActionListener(new PXDListener());
//创建一个类 管理事件的回调
class PXDListener implements TextView.OnEditorActionListener{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
System.out.println("点击了");
return false;
}
}
1.2 匿名类对象
et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
et.getText();
return false;
}
});
1.3 Lambda表达式
et.setOnEditorActionListener((textView, actionId, event) -> {
System.out.println("点击了");
return true;
});
-
2.当前这个Activity来监听事件
public class MainActivity extends AppCompatActivity implements TextView.OnEditorActionListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et.setOnEditorActionListener(this);
}
//键盘被按下的回调事件
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
System.out.println("点击了");
return false;
}
}
四、练习-PIN解锁Demo
完整demo
Xml搭建界面
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private String password;
private String firstInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取xml的控件
mTextView=findViewById(R.id.tv_alert);
mEditText=findViewById(R.id.et_password);
Resources res=getResources();
//通过这个对象获取string.xml里面对应的字符串
String fileName=res.getString(R.string.password_file_name);
//获取共享的sp对象:1.文件不存在就创建 2.文件存在就打开
final SharedPreferences sp=getSharedPreferences(fileName,MODE_PRIVATE);
//通过key获取对应的value
password=sp.getString("pwd",null);
//显示提示文本
if(password==null){
mTextView.setText("请设置密码");
}else{
mTextView.setText("请输入密码");
}
//监听内容改变的事件
//观察者
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
//获取文本的内容
String inputPassword=editable.toString();
//判断是不是6个
if(inputPassword.length()==6)
{
if(password==null){
//设置密码
if(firstInput==null){
//设置密码的第一次
firstInput=inputPassword;
//提示请确认密码
mTextView.setText("请确认密码");
//清空密码
mEditText.setText("");
}else{
//确认密码
if(firstInput.equals(password)){
//密码正确
mTextView.setText("设置密码成功");
//保存密码
SharedPreferences.Editor edit=sp.edit();
edit.putString("pwd",firstInput);
edit.commit();
goToNext();
}else{
//密码不正确
mTextView.setText("两次密码不一致 请重新设置");
firstInput = null;
mEditText.setText("");
}
}
}else{
//密码设置过了
if(inputPassword.equals(password)){
//密码正确
mTextView.setText("密码正确!!");
}else{
//不正确
mTextView.setText("密码错误请重新输入");
//清空
mEditText.setText(" ");
}
}
}
}
});
}
运行效果
步骤解析
-
导入图片素材
-
colors.xml管理字体颜⾊
dimens.xml管理尺寸数据-(在value里面新建一个dimens.xml管理尺寸数据)
新建dimens.xml
values->new->Values resource file->设置filename为dimens
- 设置键盘⼀直显示-(PIN解锁界面中,当输入密码时,会有键盘弹出,但是要在点击一下界面后键盘才会出现,现要求键盘一直显示,不需要点击后再显示)
在
manifests
的AndroidManifest.xml
里面添加android:windowSoftInputMode="stateAlwaysVisible"
思考:如何在密码输入成功(即登录成功)后跳转到另一个界面,并从另一个界面跳转回去。
^^
- 1.创建下一个界面
创建一个新的界面
在java的第一个包里面鼠标右击新建->Activity->Empty Activity->设置一个Activity Name
- 2.设置第二个界面的背景
- 3.在MainActivity里面实现界面跳转
- 4.点击屏幕实现返回
运行效果:
心得体会
今天上午没有拿眼镜,然后作为一个近视,很痛苦的上了一上午的课,然后上课就跟不上进度,难受。事实证明,要爱护好自己的视力