2013-05-06 47 views
3

在我的活动应用程序,我想设置EditText我点击里面(焦点)的EditText并键入键清除button应该出现在右侧EditText
当EditText上为空时清除按钮必须移除。
但它没有显示给我..
我应该在这里实施哪个事件..? onTouchonFocusChangeaddTextChangedListener还有什么代码..?下面的代码我已经做过的事情...
秀复合绘制到的EditText事件

在活动


clear = getResources().getDrawable(R.drawable.round_clear); 
    clear.setBounds(0, 0, clear.getIntrinsicWidth(), clear.getIntrinsicHeight()); 

和事件作为

@Override 
public void onFocusChange(View v, boolean hasFocus) 
{ 
    switch (v.getId()) 
    { 
     case R.id.uIDEditText: 
       if(hasFocus && !uIDEditText.getText().toString().isEmpty()) 
        uIDEditText.setCompoundDrawables(null, null, clear, null);     
       else 
        uIDEditText.setCompoundDrawables(null, null, null, null); 
      break; 

     case R.id.pwdEditText: 
       if(hasFocus && !pwdEditText.getText().toString().isEmpty()) 
        pwdEditText.setCompoundDrawables(null, null, clear, null); 
       else 
        pwdEditText.setCompoundDrawables(null, null, null, null); 

      break;   
    }    
} 


另一个事件是:


@Override 
public boolean onTouch(View v, MotionEvent event) 
{ 
    switch (v.getId()) 
    { 
     case R.id.uIDEditText: 
      final int x = (int)event.getX(); 
      final int y = (int)event.getY();    
      if(event.getAction() == MotionEvent.ACTION_UP && clear!=null) { 
       Rect rBounds = clear.getBounds(); 

       int n1 = v.getRight(); 
       int n2 = v.getRight()+rBounds.width(); 
       int n3 = v.getPaddingTop(); 
       int n4 = v.getHeight()-v.getPaddingBottom(); 

       if(x>=(n1) && x<=(n2) && y>=n3 && y<=(n4)) 
       { 
        uIDEditText.setText(""); 
        event.setAction(MotionEvent.ACTION_CANCEL); 
       } 
      } 
    break; 
     } 
    } 

回答

7

我sovled它...创建下面的代码

public class CustomEditText extends EditText { 

private Drawable dRight; 
private Rect rBounds; 
CustomEditText(Context context,AttributeSet attributeSet){ 
    super(context,attributeSet); 
} 
@Override 
public void setCompoundDrawables(Drawable left, Drawable top, 
     Drawable right, Drawable bottom) { 
    /*if (left != null) { 
     dLeft = left; 
    }*/ 
    if (right != null) { 
     dRight = right; 
    } 
    super.setCompoundDrawables(left, top, right, bottom); 
} 

@Override 
public void addTextChangedListener(TextWatcher watcher) {  
    super.addTextChangedListener(watcher);  
} 

@Override 
protected void onTextChanged(CharSequence text, int start, 
     int lengthBefore, int lengthAfter) {   
    super.onTextChanged(text, start, lengthBefore, lengthAfter); 
    if(this.getText().toString().length()>0) 
     this.setCompoundDrawablesWithIntrinsicBounds(null, null, dRight, null); 
    else 
     this.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); 
} 
@Override 
protected void finalize() throws Throwable { 
    dRight = null; 
    rBounds = null; 
    super.finalize(); 
} 
} 

和在XML中加入:

<com.example.screen.CustomEditText 
    android:id="@+id/uIDEditText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"  
    android:drawableRight="@drawable/round_clear"  
    android:textColor="#ffffff" /> 


在活性(的EditText ontouch听者):

uIDEditText.setOnTouchListener(new OnTouchListener() {   
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() != MotionEvent.ACTION_UP)       
       return false; 

      if (event.getX() > uIDEditText.getWidth() - clear.getIntrinsicWidth()) 
      { 
       uIDEditText.setText("");  
       event.setAction(MotionEvent.ACTION_CANCEL); 
      } 
      return false; 
     } 
    }); 
+0

什么是清晰变量在这里? – Rajesh 2016-11-18 12:35:17

+0

@Rajesh clear是Drawable变量,你必须在OnCreate()中标识它。这里'drawable/round_clear“' – Pravin 2016-12-19 13:55:18

0

你想要的是这里。

对edittext使用Textwatcher功能。

package com.example.editwatch; 

import android.os.Bundle; 
import android.app.Activity; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.Menu; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 


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

     edittext_search=(EditText)findViewById(R.id.editText1); 
     imageView1=(ImageView)findViewById(R.id.imageView1); 

     edittext_search.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 

       if(edittext_search.getText().length()>0) 
       { 
        imageView1.setVisibility(View.VISIBLE); 
       } 
       else 
       { 
        imageView1.setVisibility(View.GONE); 
       } 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

      } 
     }); 


    } 

} 
+0

for imageview它的作品,我知道,但它不适用于'EditText'里面的'Compound drawables' ..(thks for suggession) – Pravin 2013-05-06 12:14:35