是否有像EditText这样包含交叉按钮的小部件,或者是否有自动创建EditText的属性?我想用十字按钮删除任何写在EditText中的文本。


当前回答

Drawable x = getResources().getDrawable(R.drawable.x);
x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight());
mEditText.setCompoundDrawables(null, null, x, null);

式中x为:

其他回答

明确的文本:

"文本字段带有清晰的文本尾随图标。"

如果设置了,当文本出现时将显示一个图标,按下该图标将清除输入文本。

    ...
    app:endIconMode="clear_text">
​
    ...
​
</com.google.android.material.textfield.TextInputLayout>

我把它留在这里:

material.io

例子

    <EditText
    android:id="@+id/idSearchEditText"
    android:layout_width="match_parent"
    android:layout_height="@dimen/dimen_40dp"
    android:drawableStart="@android:drawable/ic_menu_search"
    android:drawablePadding="8dp"
    android:ellipsize="start"
    android:gravity="center_vertical"
    android:hint="Search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:paddingStart="16dp"
    android:paddingEnd="8dp"
/>

EditText mSearchEditText = findViewById(R.id.idSearchEditText);
mSearchEditText.addTextChangedListener(this);
mSearchEditText.setOnTouchListener(this);


@Override
public void afterTextChanged(Editable aEditable) {
    int clearIcon = android.R.drawable.ic_notification_clear_all;
    int searchIcon = android.R.drawable.ic_menu_search;
    if (aEditable == null || TextUtils.isEmpty(aEditable.toString())) {
        clearIcon = 0;
        searchIcon = android.R.drawable.ic_menu_search;
    } else {
        clearIcon = android.R.drawable.ic_notification_clear_all;
        searchIcon = 0;
    }
    Drawable leftDrawable =  null;
    if (searchIcon != 0) {
        leftDrawable = getResources().getDrawable(searchIcon);
    }
    Drawable rightDrawable = null;
    if (clearIcon != 0) {
        rightDrawable = getResources().getDrawable(clearIcon);
    }

    mSearchEditText.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, rightDrawable, null);
}


@Override
public boolean onTouch(View aView, MotionEvent aEvent) {
    if (aEvent.getAction() == MotionEvent.ACTION_UP){
        if (aEvent.getX() > ( mSearchEditText.getWidth() - 
         mSearchEditText.getCompoundPaddingEnd())){
            mSearchEditText.setText("");
        }
    }
    return false;
}

下面是带有小部件的完整库: https://github.com/opprime/EditTextField

要使用它,你应该添加依赖:

compile 'com.optimus:editTextField:0.2.0'

在layout.xml文件中,你可以设置小部件:

xmlns:app="http://schemas.android.com/apk/res-auto"

app:clearButtonMode,can有这样的值: 从来没有 总是 whileEditing unlessEditing 应用:clearButtonDrawable

实际例子:

如果你不想使用自定义视图或特殊的布局,你可以使用9-patch来制作(X)按钮。

示例:http://postimg.org/image/tssjmt97p/(我没有足够的点在StackOverflow上发布图像)

右边和底部黑色像素的交点表示内容区域。这个区域以外的都是空白。为了检测用户是否点击了x,你可以像这样设置OnTouchListener:

editText.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_UP){
            if (motionEvent.getX()>(view.getWidth()-view.getPaddingRight())){
                ((EditText)view).setText("");
            }
        }
        return false;
    }
});

根据您的需要,这种解决方案在某些情况下可以更好地工作。我希望我的xml不那么复杂。这也有助于如果你想有一个图标在左边,因为你可以简单地把它包括在9补丁。

对于可绘制的资源,您可以使用标准的android图像:

http://androiddrawables.com/Menu.html网站档案

例如:

android:background="@android:drawable/ic_menu_close_clear_cancel"