Android 的EditText控件学习

Android的EditText控件学习

java.lang.Object
   android.view.View
      android.widget.TextView
  android.widget.EditText



XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
   <EditText
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:hint="请输入用户名"/>
    <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLength="10"→最多能接收字符的个数,maxLines代表最多输入的行数
            android:numeric="integer"→限制输入的必须是整数
            android:password="true"→输入字符不可见
            android:hint="请输入密码"/>
<EditText
            android:id="@+id/etPhone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入电话号码"
            />
</LinearLayout>

Java代码:
package com.ncsyeyy.YeyyEditText;


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class MyActivity extends Activity {


    private EditText etPhone;


    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        etPhone = (EditText) findViewById(R.id.etPhone);
        etPhone.addTextChangedListener(new Phone());
    }
    /*
    * (1)使用TextWathcer限制输入字符个数布局中EditText在android布局中经常用到,
    * 对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输入框中输入的内容来限制输入字符个数。
    * (2)使用TextWathcer实现EditeText和TextView同步,
    * TextWatcher自身是一个接口,首先需要实现这个接口并覆盖其三个方法,分别为Text改变之前,
    * 改变之后以及改变的过程中各自发生的动作相应,这里我们只需要实现EditText在文本发生改变时候让TextView的内容跟着发生变化。
    * */
    class Phone implements TextWatcher{
//文字改变前的回调方法
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//s之前的文字内容,start 开始的位置,count 被改变的旧内容数,after 改变后的内容数量添加文字总数
        }
//文字改变时的回调方法
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
//这里的s表示改变之后的内容,通常start和count组合,可以在s中读取本次改变字段中新的内容。而before表示被改变的内容的数量。
        }
//文字改变后的回调方法,最总显示内容
        @Override
        public void afterTextChanged(Editable s) {
            //得到Editable对象的string
            String phoneStr=s.toString();
//            判断输入内容是否为phone
            boolean b=isPhoneNumber(phoneStr);
            if(b){
//                如果b为true,设置etPhone的字体颜色为绿色
                etPhone.setTextColor(Color.rgb(0,255,0));
            }else {
//                否则为红色
                etPhone.setTextColor(Color.rgb(255, 0, 0));
            }
        }
    }
    /*
    * 方法名:isPhoneNumber
    * 参数:String
    * 返回值:boolean
    * 方法作用:判断参数字符串是否是电话格式
    */
    public boolean isPhoneNumber(String str){
//        定义电话格式的正则表达式
        String regex="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";→关于正则表达式部分不是很理解
//        设定查看模式
        Pattern pattern= Pattern.compile(regex);
//        判断str是否匹配,返回匹配结果
        Matcher matcher=pattern.matcher(str);
        return matcher.find();
    }
}

网上知识整理:
实现在EditText中输入自定义表情,需要将放在drawable中的表情图片,嵌入到EditText中,这里利用ImageSpan实现该功能。
第一步:利用反射机制,得到图片资源的ID,生成图片bitmap对象
Field field = R.drawable.class.getDeclaredField("image" + random);


int resouceId = Integer.parseInt(field.get(null).toString());


Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resouceId);
第二步:创建imageSpan对象,将imageSpan对象加载到spannableString中
ImageSpan span = new ImageSpan(getApplicationContext(), bitmap);


SpannableString spanna = new SpannableString("image");


spanna.setSpan(span, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
第三步:将SpannableString对象加到EditText中
edittext.append(spanna);
如何在EditText中限定输入字符的方式:
1.通过设置digits属性限定输入的字符:android:digits="0123456789"
2.通过设置inputtype属性选择输入字符类型:android:inputType="number"
3.通过设置numberic属性接受数字输入:android:numeric="integer"

android:inputType来设置文本的类型,让输入法选择合适的软键盘的.
android:numeric来控制输入的数字类型,
一共有三种分别为
integer(正整数)、
signed(带符号整数)
和decimal(浮点数).

xml布局:
</pre><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView android:id="@+id/tv"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textColor="@android:color/white"
              android:ellipsize="marquee"
              android:focusable="true"
              android:marqueeRepeatLimit="marquee_forever"
              android:focusableInTouchMode="true"
              android:scrollHorizontally="true"
              android:text="Please input the text:"
            />
    <EditText android:id="@+id/ET"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:inputType="number"/>
</LinearLayout>


Java代码:
package com.ncsyeyy.YeyyEditTextTextWatcher;


import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;


public class MyActivity extends Activity {
    private TextView mTextView;
    private EditText mEditText;


    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mTextView = (TextView)findViewById(R.id.tv);
        mEditText = (EditText)findViewById(R.id.ET);
        mEditText.addTextChangedListener(mTextWatcher);


    }
    TextWatcher mTextWatcher = new TextWatcher() {
        private CharSequence temp;
        private int editStart ;
        private int editEnd ;
        @Override
        public void beforeTextChanged(CharSequence s, int arg1, int arg2,
                                      int arg3) {
            temp = s;
        }


        @Override
        public void onTextChanged(CharSequence s, int arg1, int arg2,
                                  int arg3) {
            mTextView.setText(s);
        }




        @Override
        public void afterTextChanged(Editable s) {
            editStart = mEditText.getSelectionStart();
            editEnd = mEditText.getSelectionEnd();
            if (temp.length() > 10) {
                Toast.makeText(MyActivity.this,
                        "你输入的字数已经超过了限制!", Toast.LENGTH_SHORT)
                        .show();
                s.delete(editStart-1, editEnd);
                int tempSelection = editStart;
                mEditText.setText(s);
                mEditText.setSelection(tempSelection);
            }
        }
    };


/*
* (2)使用TextWathcer实现EditeText和TextView同步
TextWatcher自身是一个接口,首先需要实现这个接口并覆盖其三个方法,分别为Text改变之前,改变之后以及改变的过程中各自发生的动作相应,这里我们只需要实现EditText在文本发生改变时候让TextView的内容跟着发生变化。
editText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
    }
@Override
public void beforeTextChanged(CharSequence s,int start,int count,int after){
    }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
   textView.setText(editText.getText());
  }
});
可以看出TextWatcher是专门用来监听文本变化的,正因为它的这个技能,正是我们实现同步的功能所需要的。
* */
}


源码地址:http://download.csdn.net/detail/csdnyuandaimaxuexi/9084607



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值