Android 的EditText控件学习
2015-09-04 18:35
513 查看
Android的EditText控件学习
java.lang.Object
android.view.View
android.widget.TextView
android.widget.EditText
XML布局:
Java代码:
网上知识整理:
实现在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布局:
Java代码:
/*
* (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
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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories