在实现edittext的可绘制右键单击事件时发出问题

时间:2016-10-04 07:09:25

标签: android android-studio

我为edittext添加了交叉图标,我想在edittext中输入内容时显示可绘制的右图标,如果有任何输入的文本,我想在十字图标上执行点击事件。我该怎么办?

4 个答案:

答案 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进行通知并应用代码以启用/禁用可见性状态逻辑。