6

ich EditText und will nach rechts „Suche“ Symbol hinzuzufügen ..Wie kann ich OnClickListener zu Drawable in EditText hinzufügen?

searchTxt.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.search, 0); 

Aber wie kann ich Ereignis für Klick auf dieses Symbol hinzufügen?

searchTxt.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
    Drawable co = ((TextView) v).getCompoundDrawables()[2]; 

    if (event.getX() > v.getMeasuredWidth() - v.getPaddingRight() 
        - co.getIntrinsicWidth()) { 
     Datas.search = searchTxt.getText().toString(); 
      startActivity(Search.class); 
     return true; 
    } else { 
     return false; 
    } 
    } 

}); 

??

Antwort

7

Drawables sind nicht interaktive Elemente, die Sie würden dann binden Sie das Bild in der Quelle

<Button 
    android:id="@+id/yourButton" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textSize="18sp" 
    android:background="@drawable/button_background_selector" 
    android:text="@string/yourStr" 
    android:textColor="#ffffffff" /> 

hinzufügen, so dass Sie ein Klick-Listener cannont auf ein Zeichen. Eine einfache Lösung wäre ein ImageView mit dem "Suche" -Symbol über die EditText und Hinzufügen einer rechten Füllung auf der EditText, so dass der Text nicht mit dem Symbol überlappen.

<FrameLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
    <EditText ... 
       android:paddingRight="..." 
       ... /> 
    <ImageView ... 
       android:src="@drawable/search" 
       android:layout_gravity="right|center_vertical" 
       ... /> 
</FrameLayout> 
0

Sie müssen Ihren Listener mit der Ressourcen-ID Ihrer Schaltfläche oder Ihres Bildes verbinden.

eigentlich können Sie ein Bild in eine Schaltfläche verwandeln. oder ersetzen Sie einfach die Schaltfläche mit Ihrem Bild. Sie fügen einen Selektor in res/drawable hinzu.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_enabled="false" android:drawable="@drawable/yourImage" /> 
<item android:state_pressed="true" android:state_enabled="true" 
    android:drawable="@drawable/yourImagePressed" /> 
<item android:state_focused="true" android:state_enabled="true" 
    android:drawable="@drawable/yourImagePressed" /> 
<item android:state_enabled="true" android:drawable="@drawable/yourImage" /> 

dann zum Layout mit der Taste ID

+0

findViewById (R.drawable.search) .setOnClickListener (this); ? –

+0

@fernando sor: Dies ist mehr ein Kommentar als eine echte Antwort. Bitte geben Sie ein Codebeispiel an. Fügen Sie möglicherweise eine Erklärung hinzu. –

0

gut würde ich vorschlagen, anstatt all diese tun können Sie einfach hinzufügen Alignleft, alignTop, alignBottom, alignTop-Tags in die Bildansicht Sie dieses

<ImageView 
     android:id="@+id/img_view_search" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@id/edt_text_search" 
     android:layout_alignRight="@id/edt_text_search" 
     android:layout_alignTop="@id/edt_text_search" 
     android:src="@drawable/search_selected" 
     android:padding="2dp" /> 

edt_text_search verwenden ist die ID der edittext

Verwandte Themen