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

android 中如何限制 EditText 最大输入字符数

2014-03-11 15:48 501 查看
方法一:

在 xml 文件中设置文本编辑框属性作字符数限制

如:android:maxLength="10" 即限制最大输入字符个数为10

方法二:

在代码中使用InputFilter 进行过滤

//editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20

[java] view
plaincopy

public class TextEditActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

EditText editText = (EditText)findViewById(R.id.entry);

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});

}

}

方法三:

利用 TextWatcher 进行监听

[java] view
plaincopy

package cie.textEdit;

import android.text.Editable;

import android.text.Selection;

import android.text.TextWatcher;

import android.widget.EditText;

/*

* 监听输入内容是否超出最大长度,并设置光标位置

* */

public class MaxLengthWatcher implements TextWatcher {

private int maxLen = 0;

private EditText editText = null;

public MaxLengthWatcher(int maxLen, EditText editText) {

this.maxLen = maxLen;

this.editText = editText;

}

public void afterTextChanged(Editable arg0) {

// TODO Auto-generated method stub

}

public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,

int arg3) {

// TODO Auto-generated method stub

}

public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

Editable editable = editText.getText();

int len = editable.length();

if(len > maxLen)

{

int selEndIndex = Selection.getSelectionEnd(editable);

String str = editable.toString();

//截取新字符串

String newStr = str.substring(0,maxLen);

editText.setText(newStr);

editable = editText.getText();

//新字符串的长度

int newLen = editable.length();

//旧光标位置超过字符串长度

if(selEndIndex > newLen)

{

selEndIndex = editable.length();

}

//设置新光标所在的位置

Selection.setSelection(editable, selEndIndex);

}

}

}

对应的 activity 部分的调用为:

[java] view
plaincopy

package cie.textEdit;

import android.app.Activity;

import android.os.Bundle;

import android.text.InputFilter;

import android.widget.EditText;

public class TextEditActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

EditText editText = (EditText) findViewById(R.id.entry);

editText.addTextChangedListener(new MaxLengthWatcher(10, editText));

}

}

限制输入字符数为10个

main.xml 文件

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:id="@+id/label"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Type here:"/>

<EditText

android:id="@+id/entry"

android:singleLine="true"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:background="@android:drawable/editbox_background"

android:layout_below="@id/label"/>

<Button

android:id="@+id/ok"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@id/entry"

android:layout_alignParentRight="true"

android:layout_marginLeft="10dip"

android:text="OK" />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_toLeftOf="@id/ok"

android:layout_alignTop="@id/ok"

android:text="Cancel" />

</RelativeLayout>

效果为输入了10个字符后,光标停在末尾

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