zoukankan      html  css  js  c++  java
  • Android控件系列之EditText

    学习目的:

    1、掌握在Android中如何建立EditText

    2、掌握EditText的常用属性

    3、掌握EditText焦点的事件、按键的事件(监听器)

    介绍:

    EditText是接受用户输入信息的最重要控件。通过前面课程的学习,您可能会猜到可以利用EditText.getText()获取它的文本,但真正的项目中,可能没那么简单,需要更多的限制,如文本长度限制,是否数字限制等等。

    鉴于手机屏幕尺寸有限,您可能总想着如何节约控件。在每个用户需要填写内容的文本框的左边加上标题在PC上是一种优雅的方法,但在手机上就会显的浪费,因此本例我们将学习如何利用一个EditText达到所有的效果:

     请注意第一个文本框,其他控件只是为了测试转移焦点后的效果,我们样例针对第一个文本进行限制,用户没有输入时,它显示“请输入您的名字”作为提示,为了区分这只是一个提示而不是真正的文本,我们使用灰色来以示区分,当用户输入自己的内容时,这个提示将会消失,而字体变为黑色,如下图:

    最后我们对EditText做了长度限制,这可以简单的在XML中将它的maxLength属性设定为一个值,但用户输入不了更多字符时,会产生歧义,因此需要告知用户无法继续输入的原因:

      

    XML布局代码如下:

    1 <?xml version="1.0" encoding="utf-8"?>
    2  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:orientation="vertical"
    4 android:layout_width="fill_parent"
    5 android:layout_height="fill_parent"
    6 >
    7  <EditText
    8 android:layout_width="fill_parent"
    9 android:layout_height="wrap_content"
    10 android:textColor="#DDDDDD"
    11 android:text="请输入您的名字"
    12 android:id ="@+id/et"
    13 android:maxLength = "10"
    14
    15 ></EditText>
    16 <Button
    17 android:layout_width="fill_parent"
    18 android:layout_height="wrap_content"
    19 android:text="点击转换焦点"
    20 ></Button>
    21 <EditText
    22 android:layout_width="fill_parent"
    23 android:layout_height="wrap_content"
    24
    25 android:text="点击转换焦点"
    26 android:id ="@+id/et2"
    27 ></EditText>
    28 </LinearLayout>

    后台代码如下:

    1 //表示文本框是否为空
    2 private Boolean isEmpty = true;
    3
    4 /** Called when the activity is first created. */
    5 @Override
    6 public void onCreate(Bundle savedInstanceState) {
    7 super.onCreate(savedInstanceState);
    8 setContentView(R.layout.main);
    9
    10 EditText et = (EditText)this.findViewById(R.id.et);
    11 //监听控件的焦点改变事件
    12 et.setOnFocusChangeListener(new OnFocusChangeListener() {
    13
    14 @Override
    15 public void onFocusChange(View arg0, boolean arg1) {
    16 // TODO Auto-generated method stub
    17 //获取触发事件的EditText
    18 EditText clickEditText = (EditText)arg0;
    19
    20 //如果失去焦点
    21 if(arg1 == false)
    22 {
    23 //获取当前文本
    24 String text =clickEditText.getText().toString().trim();
    25 //如果的确人为输入过内容
    26 if(text.length()>0
    27 &text.equals("请输入您的名字")== false)
    28 {
    29 isEmpty = false;
    30 clickEditText.setTextColor(Color.BLACK);
    31 clickEditText.setText(text);
    32 }
    33 else
    34 {
    35 clickEditText.setText("请输入您的名字");
    36 clickEditText.setTextColor(Color.GRAY);
    37 isEmpty = true;
    38 }
    39 }
    40 //如果获得焦点
    41 else
    42 {
    43 clickEditText.setTextColor(Color.BLACK);
    44 //如果处于未编辑状态,则清空“请输入您的名字”这几个字
    45 if(isEmpty == true)
    46 {
    47 clickEditText.setText("");
    48 }
    49 }
    50 }
    51 });
    52
    53 //监听控件有新字符输入
    54 et.setOnKeyListener(new OnKeyListener() {
    55
    56 @Override
    57 public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
    58 // TODO Auto-generated method stub
    59 //获取触发事件的EditText
    60 EditText clickEditText = (EditText)arg0;
    61 //获取当前文本
    62 String text =clickEditText.getText().toString().trim();
    63
    64
    65 if(text.length()==10)
    66 {
    67 //提示用户
    68 Toast toast = Toast.makeText(MyActivity.this, "最大长度为10个字符", Toast.LENGTH_SHORT);
    69 toast.setGravity(0, 0, 0);
    70 toast.show();
    71 }
    72 return false;
    73 }
    74 });
    75
    76 }

    总结:

    本文介绍了如何在Android中使用EditText,并介绍了常用的属性和事件,最后实现了一个用户体验良好的,并且非常通用的文本限制和提示功能。

     

  • 相关阅读:
    BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
    Luogu 3690 Link Cut Tree
    CF1009F Dominant Indices
    CF600E Lomsat gelral
    bzoj 4303 数列
    CF1114F Please, another Queries on Array?
    CF1114B Yet Another Array Partitioning Task
    bzoj 1858 序列操作
    bzoj 4852 炸弹攻击
    bzoj 3564 信号增幅仪
  • 原文地址:https://www.cnblogs.com/wt616/p/2086056.html
Copyright © 2011-2022 走看看