码迷,mamicode.com
首页 > 移动开发 > 详细

Android EditText输入最大长度限制如何给用户以友好的提示

时间:2015-08-03 20:44:24      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

我们知道EditText有个属性android:maxLength="xxx" ,可以设置EditText的最大长度。

也可以用如下代码设置长度,editText.setFilters( new  InputFilter[]{ new  InputFilter.LengthFilter( 50 )});  

 

然后我写个小示例,xml布局如下:

技术分享
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    > 
    <TextView
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
        android:text="请输入:" 
        />
    <EditText   
        android:id="@+id/editText" 
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"
        android:maxLength="15"
        /> 
</LinearLayout>
View Code

设置最大长度为15

MainActivity 如下:

package com.example.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity { 
    
    private EditText editText = null;
    private Toast toast = null;
    
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        editText = (EditText)findViewById(R.id.editText);  
        editText.addTextChangedListener(textWatcher);  
    }  
      
    private TextWatcher textWatcher = new TextWatcher() {  
          
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count,  
                int after) {  
            //TODO
        }  
        @Override    
        public void onTextChanged(CharSequence s, int start, int before,     
                int count) {     
            //TODO
        }
         @Override    
         public void afterTextChanged(Editable s) {     
             Log.d("TAG","afterTextChanged    "+"str="+s.toString());
             int len = s.toString().length();
             if(len>=15){
                 toast = Toast.makeText(getApplicationContext(), "字符不能超过15个", 1000);
                 toast.setGravity(Gravity.TOP, 0, 235);
                 toast.show();
            }
         }
    };  
} 

我们给EditText加上textChanged监听器,并在afterTextChanged中对已经输入文本的长度进行判断,当长度大于或者等于15时

我们给出提示字符不能超过15个,如下图、

技术分享

 

但是,问题来了。提示完字符不能超过15个之后,假设我们再进行输入操作,这时候就不再提示了。

假设用户没有注意到弹的toast,而超过15个字符后用户还在输入,但是文本框却没有变化,造成体验就不好了。

 

我们希望的是超过15个字符后用户如果继续输入,我们依旧每次都提示他字符不能超过15个。

我们修改代码如下,

package com.example.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.text.InputFilter;
import android.text.Spanned;
import android.view.Gravity;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity { 
    
    private EditText editText = null;
    private Toast toast = null;
    
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        editText = (EditText)findViewById(R.id.editText); 
        
        editText.setFilters(new InputFilter[]{new MaxTextLengthFilter(16)});
    }  
      
    
    class MaxTextLengthFilter implements InputFilter{
        
        private int mMaxLength;
        
        public MaxTextLengthFilter(int max){
            mMaxLength = max - 1;
            toast = Toast.makeText(MainActivity.this,"字符不能超过15个",1000);
            toast.setGravity(Gravity.TOP, 0, 235);
        }
        
        public CharSequence filter(CharSequence source, int start, int end, 
                Spanned dest, int dstart ,int dend){
            int keep = mMaxLength - (dest.length() - (dend - dstart));
            if(keep < (end - start)){
                toast.show();
            }
            if(keep <= 0){
                return "";
            }else if(keep >= end - start){
                return null;
            }else{
                return source.subSequence(start,start + keep);
            }
        }
    }
} 

 

自定义类实现InputFilter,在filter方法中做长度判断,这样一来,当达到最大长度之后,继续输入字符的话,则每次都会弹toast提示。

Android EditText输入最大长度限制如何给用户以友好的提示

标签:

原文地址:http://www.cnblogs.com/sphere/p/4700140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!