【Android程序开发】EditText详解

一、EditText介绍

EditText是一个输入框,在Android开发中是常用的控件。也是获取用户数据的一种方式。
EditTextTextView的子类,它继承了[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) {
           }
       });
【Android程序开发】EditText详解_第1张图片
image.png

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(" ");
                        }
                    }
                }
            }
        });

    }
运行效果
20190908_194523.gif
步骤解析
  • 导入图片素材

    【Android程序开发】EditText详解_第2张图片
    image.png

  • colors.xml管理字体颜⾊

    【Android程序开发】EditText详解_第3张图片
    image.png

  • dimens.xml管理尺寸数据-(在value里面新建一个dimens.xml管理尺寸数据)

新建dimens.xml
values->new->Values resource file->设置filename为dimens

【Android程序开发】EditText详解_第4张图片
image.png

【Android程序开发】EditText详解_第5张图片
image.png

  • 设置键盘⼀直显示-(PIN解锁界面中,当输入密码时,会有键盘弹出,但是要在点击一下界面后键盘才会出现,现要求键盘一直显示,不需要点击后再显示)

manifestsAndroidManifest.xml里面添加android:windowSoftInputMode="stateAlwaysVisible"

【Android程序开发】EditText详解_第6张图片
image.png

思考:如何在密码输入成功(即登录成功)后跳转到另一个界面,并从另一个界面跳转回去。^^
  • 1.创建下一个界面

创建一个新的界面
在java的第一个包里面鼠标右击新建->Activity->Empty Activity->设置一个Activity Name

【Android程序开发】EditText详解_第7张图片

【Android程序开发】EditText详解_第8张图片
image.png

  • 2.设置第二个界面的背景
【Android程序开发】EditText详解_第9张图片
image.png
  • 3.在MainActivity里面实现界面跳转
【Android程序开发】EditText详解_第10张图片
  • 4.点击屏幕实现返回
【Android程序开发】EditText详解_第11张图片
image.png

运行效果:

20190908_202133.gif
心得体会

今天上午没有拿眼镜,然后作为一个近视,很痛苦的上了一上午的课,然后上课就跟不上进度,难受。事实证明,要爱护好自己的视力

你可能感兴趣的:(【Android程序开发】EditText详解)