He creado un EditText para la búsqueda, la cual contiene en la parte izquierda un icono de búsqueda y en el lado derecho del icono:

<EditText
    android:id="@+id/Search"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:drawableLeft="@android:drawable/ic_menu_search"
    android:drawableRight="@android:drawable/ic_delete"
    android:hint="Search Product .." >
</EditText>

Quiero saber ¿cómo puedo borrar el contenido de EditText cuando hago clic en el botón con una cruz.

Gracias de antemano.

Consulte en este enlace stackoverflow.com/questions/13135447/…
Tengo un problema cuando uso este código, El método setDrawableClickListener(nueva DrawableClickListener(){}) no está definido por el tipo de EditText.
No puedo agregar cualquier comentario en este enlace

OriginalEl autor Sarra | 2014-04-20

3 Comentarios

  1. 16

    Una mejor respuesta por parte de @aristo_sh de Manejo de eventos de clic en una imagen dentro de un EditText

        mQueryEditText.setOnTouchListener(new OnTouchListener() {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_TOP = 1;
            final int DRAWABLE_RIGHT = 2;
            final int DRAWABLE_BOTTOM = 3;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    int leftEdgeOfRightDrawable = mQueryEditText.getRight() 
                          - mQueryEditText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width();
                    //when EditBox has padding, adjust leftEdge like
                    //leftEdgeOfRightDrawable -= getResources().getDimension(R.dimen.edittext_padding_left_right);
                    if (event.getRawX() >= leftEdgeOfRightDrawable) {
                        //clicked on clear icon
                        mQueryEditText.setText("");
                        return true;
                    }
                }
                return false;
            }
        });
    Sólo el cambio es la adición de una variable leftEdgeOfRightDrawable.
    sí, eso es lo que hizo el código comprensible.
    No es una solución universal. Debe trabajar tú.
    Por alguna razón, (?) Dispositivos de Samsung no informar el valor correcto .getRight()
    Corrección! Esto no tiene relleno en cuenta, se debe restar el margen derecho de leftEdgeOfRightDrawable

    OriginalEl autor Paul Verest

  2. 2

    Intente esto:

    activity_main.xml

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="9dp"
        android:padding="5dp">
    
        <EditText
            android:id="@+id/Search"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:drawableLeft="@android:drawable/ic_menu_search"
            android:hint="Search Product .." >
        </EditText>
    
        <Button
            android:id="@+id/clearText"
            android:layout_width="23dp"
            android:layout_height="23dp"
            android:layout_marginRight="10dp"
            android:layout_gravity="right|bottom"
            android:layout_marginBottom="10dp"
            android:background="@android:drawable/ic_delete"
            android:onClick="clear"/>
    
    </FrameLayout>

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        EditText mEditText;
        Button mClearText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mEditText = (EditText) findViewById(R.id.Search);
            mClearText = (Button) findViewById(R.id.clearText);
    
            //initially clear button is invisible
            mClearText.setVisibility(View.INVISIBLE);
    
            //clear button visibility on text change
            mEditText.addTextChangedListener(new TextWatcher() {
    
                @Override
                public void afterTextChanged(Editable s) {
                    //do nothing
                }
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    //do nothing
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    if(s.length() != 0) {
                        mClearText.setVisibility(View.VISIBLE);
                    } else {
                        mClearText.setVisibility(View.GONE);
                    }
                }
            });
    
        }
    
        //clear button onclick
        public void clear(View view) {
            mEditText.setText("");
            mClearText.setVisibility(View.GONE);
        }
    
    }

    OriginalEl autor Ashwin

  3. 0

    Ejemplo que yo hice:

    mPasswordView = (EditText) findViewById(R.id.password);
    mPasswordView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_UP){
    //100 is a fix value for the moment but you can change it
    //according to your view
    if (motionEvent.getX()>(view.getWidth()-100)){
    ((EditText)view).setText("");
    }
    }
    return false;
    }
    });
    mPasswordView.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(s.toString().trim().length()==0){
    mPasswordView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    } else {
    mPasswordView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_close_black_24dp, 0);
    }
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {
    //TODO Auto-generated method stub
    mPasswordView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    }
    @Override
    public void afterTextChanged(Editable s) {
    //TODO Auto-generated method stub
    if (s.toString().trim().length() == 0) {
    mPasswordView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
    } else {
    mPasswordView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_close_black_24dp, 0);
    }
    }
    });

    OriginalEl autor Jacques Weber

Dejar respuesta

Please enter your comment!
Please enter your name here