我为edittext添加了交叉图标,我想在edittext中输入内容时显示可绘制的右图标,如果有任何输入的文本,我想在十字图标上执行点击事件。我该怎么办?
答案 0 :(得分:1)
要为您的可绘制权限添加单击侦听器,以下代码将帮助您:
editComment.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;
if(event.getAction() == MotionEvent.ACTION_UP) {
if(event.getRawX() >= (editComment.getRight() - editComment.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
// your action here
return true;
}
}
return false;
}
});
我们getRawX()因为我们想要在屏幕上获得触摸的实际位置,而不是相对于父级。
左键单击
if(event.getRawX() <= (editComment.getCompoundDrawables()[DRAWABLE_LEFT].getBounds().width()))
更新:如果在编辑文本中输入了一些字符,则可绘制的右侧可见,然后以下代码将起作用:
edittext.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)
{
// Add drawable Right
edittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.icon, 0);
}
else
{
edittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
}
@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
}
});
答案 1 :(得分:1)
XML代码`
<EditText
android:id="@+id/et_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="12"
android:hint="Text"
android:singleLine="true" />
<ImageButton
android:id="@+id/ib_clear"
style="?android:buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="-50dp"
android:layout_marginStart="-50dp"
android:src="@drawable/ic_cancel_black_24dp" />
</LinearLayout>`
您可以在Java代码中更改十字图标(图像按钮)的可见性。你可以将onclicklistener添加到clickevent的图像按钮。
执行以下操作以隐藏或显示十字图标
et_text.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){if(et_text.getText().toString().length()>0){et_text.setVisibility(VIEW.VISIBLE);}else{et_text.setVisibility(VIEW.GONE);}
}});
答案 2 :(得分:0)
如果左边是抽签,右边是抽签,你不能让抽签听事。但是动态使用它可以提供帮助。 所以你需要做的是将textwatcher添加到你的editext和bafter文本
更改了您的editext的监听器您需要隐藏并向左显示您的drawble 并且动态地 。 动态添加drawble:
Drawable icon = getContext().getResources().getDrawable(R.drawable.smiley );
icon.setBounds( 0, 0, 60, 60 );
editext.setCompoundDrawables( icon, null, null, null );
或
Drawable img = getContext().getResources().getDrawable( R.drawable.smiley );
editext.setCompoundDrawablesWithIntrinsicBounds( img, null, null, null);
或
editext.setCompoundDrawablesWithIntrinsicBounds(R.drawable.smiley,0,0,0);
答案 3 :(得分:0)
<RelativeLayout
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/crossButton"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/editTextField"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</RelativeLayout>
</LinearLayout>
<ImageButton
android:id="@+id/crossButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="gone" />
</RelativeLayout>
在创建你的xml之后,你有了edittext和image;我还将您的近距离图像可见性设置为已消失。现在,在代码中实现了FocusChangeListener,您可以在输入文本时启用按钮可见性。
editTextField.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View view, boolean hasFocus) {
if(hasFocus && editTextField.getText().toString().length() > 0){
crossButton.setVisibility(View.VISIBLE);
}
else{
crossButton.setVisibility(View.GONE);
}
crossButton.invalidate();
}
});
我已经编写了一个示例代码供您参考,希望这将回答您的问题。
一个xml,带有带图像按钮的EditText。
对此xml进行通知并应用代码以启用/禁用可见性状态逻辑。