2012-11-19 39 views
1

我需要添加一个编辑文本像MS Word中我们screen.How可以设计一个Android的布局屏幕用于此目的的内部可触摸的图像视图我已经尝试的代码如下所示:如何在编辑文本中添加可触摸的图像视图? ?

public class edittext extends EditText 
{ 
    public String defaultValue = ""; 
     final Drawable imgX = getResources().getDrawable(android.R.drawable.presence_offline); // X image 

    private Html.ImageGetter imageGetter; 
    public edittext(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
     // TODO Auto-generated constructor stub 
    } 
    public edittext(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
     // TODO Auto-generated constructor stub 
    } 
    public edittext(Context context) 
    { 
     super(context); 
     init(); 
     // TODO Auto-generated constructor stub 
    } 
    void init() { 

      // Set bounds of our X button 
      imgX.setBounds(0, 0, imgX.getIntrinsicWidth(), imgX.getIntrinsicHeight());  

      // There may be initial text in the field, so we may need to display the button 
      manageClearButton(); 

      edittext.this.setOnTouchListener(new OnTouchListener() { 
       public boolean onTouch(View v, MotionEvent event) { 

        edittext et = edittext.this; 

        // Is there an X showing? 
        if (et.getCompoundDrawables()[2] == null) return false; 
        // Only do this for up touches 
        if (event.getAction() != MotionEvent.ACTION_UP) return false; 
        // Is touch on our clear button? 
        if (event.getX() > et.getWidth() - et.getPaddingRight() - imgX.getIntrinsicWidth()) { 
         et.setText(""); 
         edittext.this.removeClearButton(); 
        } 
        return false; 
       } 
      }); 

      edittext.this.addTextChangedListener(new TextWatcher() { 
       public void onTextChanged(CharSequence s, int start, int before, int count) { 

        edittext.this.manageClearButton(); 
       } 

       public void afterTextChanged(Editable arg0) { 
       } 

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

     void manageClearButton() { 
      if (this.getText().toString().equals("")) 
       removeClearButton(); 
      else 
       addClearButton(); 
     } 
     void addClearButton() { 
      this.setCompoundDrawables(this.getCompoundDrawables()[0], 
        this.getCompoundDrawables()[1], 
        imgX, 
        this.getCompoundDrawables()[3]); 
     } 
     void removeClearButton() { 
      this.setCompoundDrawables(this.getCompoundDrawables()[0], 
        this.getCompoundDrawables()[1], 
        null, 
        this.getCompoundDrawables()[3]); 
     } 

} 

如果有谁知道请帮助我,谢谢。

回答

2

我正在那样做。 Drawable将位于EditText的右侧。请尝试代码。

EditText contactLine = new EditText(getActivity()); 
Drawable drawable = getActivity().getResources().getDrawable(...); 
drawable.setBounds(new Rect(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight())); 
contactLine.setCompoundDrawables(null, null, drawable, null); 
contactLine.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Drawable co = v.getCompoundDrawables()[2]; 
      if (co == null) { 
       return false; 
      } 
      if (event.getAction() != MotionEvent.ACTION_DOWN) { 
       return false; 
      } 
      if (event.getX() > v.getMeasuredWidth() - v.getPaddingRight() 
        - co.getIntrinsicWidth()) { 
       whatYouWantToDo(); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 
+0

感谢您宝贵的答复....让我检查这个代码 – user1498512

+1

谢谢你的答案,但我怎样才能让我的绘制对象可以在我的edittext.is中移动吗?我只需要移动我的drawable object.pls帮助我 – user1498512

+0

您可以使用RelativeLayout或AbsolutLayout来保存EditText和一个imageView。然后你必须实现一个View.Touchlistener。你会在这个监听器中获得位置信息,并添加到视图的位置变化中。 – mayu

0

可能是你可以做的是,在使用RelativeLayout的布局。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <EditText 
     android:id="@+id/et1" 
     android:layout_width="200dp" 
     android:layout_height="100dp" 
     android:clickable="false" 
     android:focusable="false" 
     android:background="@drawable/ic_action_search"/> 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/et1" 
     android:paddingLeft="5dp" 
     android:background="@drawable/ic_launcher" 
     /> 

</RelativeLayout> 
0

对于RelativeLayout中的可移动视图,您可以执行此操作。 DragView可以是一个ImageView。

 View DragView; 

    private boolean inDrag; 
    int xDragTouchOffset, yDragTouchOffset; 
    @Override 
    public boolean onTouchEvent(View View, MotionEvent event) { 
     final int action = event.getAction(); 
     final int x = (int) event.getX(); 
     final int y = (int) event.getY(); 
     boolean result = false; 
     if (action == MotionEvent.ACTION_DOWN) 
      inDrag = true; 
      xDragTouchOffset = x; 
      yDragTouchOffset = y; 
      result = true; 
     } else if (action == MotionEvent.ACTION_MOVE && inDrag == true) { 
      setDragImagePosition(x, y);//HERE YOU HANDLE THE POSITION OF YOUR VIEW 
      result = true; 
     } else if (action == MotionEvent.ACTION_UP && inDrag ==true) { 

      inDrag = false; 
      result = true; 
     } 

     return result; 

    } 

    private void setDragImagePosition(int x, int y){ 

     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) DragView 
       .getLayoutParams(); 

     lp.setMargins(x - xDragImageOffset - xDragTouchOffset, y 
       - yDragImageOffset - yDragTouchOffset, 0, 0); 
     dragImage.setLayoutParams(lp); 
    } 
+0

感谢您的帮助,这似乎是错误。我只需在我的edittext.pls内移动我的图片给出最佳提示 – user1498512

+0

在相关布局中,您可以将视图放在另一个视图的上方。因此,创建一个包含edittext(full_parent)和imageview的layout.xml。然后你可以设置图像视图的位置。 – mayu

+0

谢谢你mayu ... iam tryng在你的方式...让看...任何方式非常感谢你的宝贵提示... – user1498512

2

,或者你可以简单地使用ImageButton,例如:

public void addListenerOnImageButton() { 
      imageButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        // called when imageButton Clicked 
       } 

      });} 
相关问题