我需要在编辑文本中添加一个可触摸的图像视图,如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]);
}
}
如果有人知道,请帮助我谢谢。
答案 0 :(得分: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;
}
}
});
答案 1 :(得分:2)
或者您只需使用ImageButton,例如:
public void addListenerOnImageButton() {
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// called when imageButton Clicked
}
});}
答案 2 :(得分: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>
答案 3 :(得分: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);
}