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

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

2015-05-09 16:53 519 查看
转自:http://blog.csdn.net/fulinwsuafcie/article/details/7437768

3种方法可以学习下;

方法一:

在 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个字符后,光标停在末尾

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