2012-09-25 10 views
7

Sono di fronte a problemi nel mettere il pulsante croce sopra la vista testo. Sto usando LinearLayout e non è in arrivo su quello, che in data Framelayout farlo funzionare, ma che non risolve il mio scopo. Allego il mio XML come riferimento, per favore aiutami a superare questo problema.Android: Come inserire l'icona a forma di croce sopra il testo a completamento automaticoView

<LinearLayout 
     android:id="@+id/top" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/phone_toolbar" 
     android:baselineAligned="true" 
     android:gravity="center_horizontal" 
     android:paddingBottom="2dp" 
     android:paddingTop="2dp" > 

     <ImageView 
      android:id="@+id/search_icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:layout_marginLeft="5dp" 
      android:layout_marginRight="10dp" 
      android:background="@drawable/toolbar_search_icon_phone" > 
     </ImageView> 

     <AutoCompleteTextView 
      android:id="@+id/text" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:layout_marginRight="10dp" 
      android:layout_weight="2" 
      android:background="@drawable/toolbar_phone_textfield" 
      android:dropDownVerticalOffset="5dp" 
      android:ems="10" 
      android:focusable="true" 
      android:hint="@string/hint" 
      android:imeOptions="actionSearch" 
      android:paddingLeft="10dp" 
      android:paddingRight="20dp" 
      android:singleLine="true" 
      android:textColor="#000000" 
      android:textSize="14sp" /> 

     <Button 
      android:id="@+id/clear_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right|center_vertical" 
      android:layout_marginRight="10dip" 
      android:background="@drawable/text_clear" /> 
    </LinearLayout> 

Grazie!

risposta

26

Usa l'androide: proprietà drawableLeft sul EditText.

<EditText 
...  
android:drawableLeft="@drawable/my_icon" /> 

se si desidera aggiungere l'icona in modo dinamico, utilizzare questo:

EditText et = (EditText) findViewById(R.id.myET); 
et.setCompoundDrawablesWithIntrinsicBounds(R.drawable.my_icon, 0, 0, 0); 

Per gestire gli eventi click:

String value = "";//any text you are pre-filling in the EditText 

final EditText et = new EditText(this); 
et.setText(value); 
final Drawable x = getResources().getDrawable(R.drawable.presence_offline);//your x image, this one from standard android images looks pretty good actually 
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight()); 
et.setCompoundDrawables(null, null, value.equals("") ? null : x, null); 
et.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (et.getCompoundDrawables()[2] == null) { 
      return false; 
     } 
     if (event.getAction() != MotionEvent.ACTION_UP) { 
      return false; 
     } 
     if (event.getX() > et.getWidth() - et.getPaddingRight() - x.getIntrinsicWidth()) { 
      et.setText(""); 
      et.setCompoundDrawables(null, null, null, null); 
     } 
     return false; 
    } 
}); 
et.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     et.setCompoundDrawables(null, null, et.getText().toString().equals("") ? null : x, null); 
    } 

    @Override 
    public void afterTextChanged(Editable arg0) { 
    } 

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

e questo può anche essere fatto utilizzando un EditText personalizzato:

Handling click events on a drawable within an EditText

+0

Grazie per quello, ma come posso tenere traccia del clic dell'evento su quel drawable. Voglio cancellare il testo presente nella vista testo a completamento automatico. – Anupam

+0

ok controlla la domanda aggiornata e anche il link –

+0

c'è un problema con il tuo codice. dovrebbe essere setCompoundDrawablesWithIntrinsicBounds invece di et.setCompoundDrawables –