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

Android 的EditText控件学习

2015-09-04 18:35 513 查看
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

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