Search code examples
androidtextviewandroid-edittextmaterial-designmaterial-components-android

Put constant text inside EditText which should be non-editable - Android


I want to have constant text inside editText like:

http://<here_user_can_write>

User should not be able to delete any chars from "http://", I searched about this and found this:

editText.setFilters(new InputFilter[] {
    new InputFilter() {
        public CharSequence filter(CharSequence src, int start,
            int end, Spanned dst, int dstart, int dend) {
            return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
        }
    }
}); 

but I don't know whether it restricts user to not delete any chars from start to end limit. I also could not understand use of Spanned class.

One way would be a good choice if we can put a TextView inside EditText but I don't think it is possible in Android since both are Views, is it possible?


Solution

  • Did u try this method?

    final EditText edt = (EditText) findViewById(R.id.editText1);
    
    edt.setText("http://");
    Selection.setSelection(edt.getText(), edt.getText().length());
    
    
    edt.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                if(!s.toString().startsWith("http://")){
                    edt.setText("http://");
                    Selection.setSelection(edt.getText(), edt.getText().length());
    
                }
    
            }
        });