如何在Android中使用InputFilter来最大化EditText中的字符数?

如何在Android中使用InputFilter来最大化EditText中的字符数?,android,android-edittext,Android,Android Edittext,问题是在60个字符后停止显示,但它仍然继续键入,只是文本没有显示,但它确实显示在“缓冲区”(表示建议的内容)中 另一个问题是,调用imageview1 onClick事件后,类型为continue,但文本不显示在编辑文本中。下面的代码片段将帮助您处理输入文件管理器 对我来说,它就像一个符咒 public class MainActivity extends Activity { EditText editText1; ImageView imageView1; @Override protec

问题是在60个字符后停止显示,但它仍然继续键入,只是文本没有显示,但它确实显示在“缓冲区”(表示建议的内容)中


另一个问题是,调用imageview1 onClick事件后,类型为continue,但文本不显示在编辑文本中。下面的代码片段将帮助您处理输入文件管理器 对我来说,它就像一个符咒

public class MainActivity extends Activity {
EditText editText1;
ImageView imageView1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText1 = (EditText) findViewById(R.id.txtMarketName);

    imageView1 = (ImageView) findViewById(R.id.imgDelete);

    final EditTextLocker locker1 = new EditTextLocker(editText1);
    locker1.limitCharacters(60);

     editText1.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if (!hasFocus) {
                imageView1.setVisibility(View.INVISIBLE);
            } else {
                imageView1.setVisibility(View.VISIBLE);
            }
        }
    });

    imageView1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText1.setText("");
        }
    });
}
}
InputFilter过滤器=新的InputFilter(){
公共CharSequence筛选器(CharSequence源、int开始、int结束、,
跨越目的地,起始点,终止点){
对于(inti=start;i
public class EditTextLocker {
private EditText editText;

private int charactersLimit;

public EditTextLocker(EditText editText) {

    this.editText = editText;

    editText.setOnKeyListener(editTextOnKeyListener);
}

private OnKeyListener editTextOnKeyListener = new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_DEL) {
            startStopEditing(false);
        }

        return false;
    }
};

private TextWatcher editTextWatcherForCharacterLimits = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {            


        if (!editText.getText().toString().equalsIgnoreCase("")) {

            int editTextLength = editText.getText().toString().trim()
                    .length();

            if (editTextLength >= charactersLimit) {

                startStopEditing(true);

            }

        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
};

public void limitCharacters(final int limit) {

    this.charactersLimit = limit;
    editText.addTextChangedListener(editTextWatcherForCharacterLimits);
}

public void unlockEditText() {

    startStopEditing(false);
}

public void startStopEditing(boolean isLock) {

    System.out.println("Start Stop Edit ==============> : " + isLock);

    if (isLock) {

        editText.setFilters(new InputFilter[] { new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend) {

                return len < 1 ? dest.subSequence(dstart, dend)
                        : "";
            }
        } });

    } else {

        editText.setFilters(new InputFilter[] { new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start,
                    int end, Spanned dest, int dstart, int dend) {
                return null;
            }
        } });
    }
}
}
public class MainActivity extends Activity {
EditText editText1;
ImageView imageView1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText1 = (EditText) findViewById(R.id.txtMarketName);

    imageView1 = (ImageView) findViewById(R.id.imgDelete);

    final EditTextLocker locker1 = new EditTextLocker(editText1);
    locker1.limitCharacters(60);

     editText1.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub
            if (!hasFocus) {
                imageView1.setVisibility(View.INVISIBLE);
            } else {
                imageView1.setVisibility(View.VISIBLE);
            }
        }
    });

    imageView1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText1.setText("");
        }
    });
}
}
  InputFilter filter = new InputFilter() { 
        public CharSequence filter(CharSequence source, int start, int end, 
Spanned dest, int dstart, int dend) { 
                for (int i = start; i < end; i++) { 
                        if (!Character.isLetterOrDigit(source.charAt(i))) { 
                                return ""; 
                        } 
                } 
                return null; 
        } 
}; 

edit.setFilters(new InputFilter[]{filter});