带有清除按钮的 Android java android.support.design.widget.TextInputLayout

Posted

技术标签:

【中文标题】带有清除按钮的 Android java android.support.design.widget.TextInputLayout【英文标题】:Android java android.support.design.widget.TextInputLayout with clear button 【发布时间】:2019-04-09 15:41:02 【问题描述】:

有没有什么办法可以得到这样的东西,加上当它包含一些东西时清除/删除文本的按钮?

<android.support.design.widget.TextInputLayout
android:id="@+id/text_input_layout"
android:layout_
android:layout_
android:hint="Inserisci Username">

                    <EditText
                        android:id="@+id/editText"
                        android:layout_
                        android:layout_
                        android:hint="Username"
                        android:inputType="text" />

</android.support.design.widget.TextInputLayout>

【问题讨论】:

您想在单击某个按钮时清除edittext 中的文本。正确的 ?或者你想改变颜色? @Raza:明文。 【参考方案1】:

我知道这已经有一段时间了,但也许它可以帮助某人。

如果使用Material组件,可以使用app:endIconMode="clear_text",例如:

 <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/key_word_wrapper"
                android:layout_
                android:layout_
                app:hintEnabled="true"
                android:hint="@string/key_word"
                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"
                android:layout_gravity="center_horizontal"
                app:endIconMode="clear_text">
                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/key_word"
                    android:layout_
                    android:layout_
                    android:inputType="text" />
            </com.google.android.material.textfield.TextInputLayout>

一旦输入文本,就会弹出小 X 按钮,并按预期自动工作。

在Text fields阅读更多选项

【讨论】:

【参考方案2】:

从编辑文本中清除文本

@Override
public void onClick(View v) 
    editText.getText().clear(); 
    //or you can use editText.setText("");

要将按钮放在edittext中,只需制作自定义布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@color/white"
>

<RelativeLayout android:layout_
    android:layout_
    android:background="@drawable/oval"
    android:layout_centerInParent="true"
    >

    <android.support.design.widget.TextInputLayout
        android:id="@+id/text_input_layout"
        android:layout_
        android:layout_
        android:layout_margin="5dp"
        android:layout_toLeftOf="@+id/id_search_button"
        android:hint="Inserisci Username">

        <EditText
            android:id="@+id/editText"
            android:layout_
            android:layout_
            android:hint="username"
            android:background="@android:color/transparent"
            android:inputType="text" />

    </android.support.design.widget.TextInputLayout>

    <ImageButton android:id="@+id/id_search_button"
        android:layout_
        android:layout_
        android:layout_alignParentRight="true"
        android:layout_marginRight="5dp"
        android:layout_centerVertical="true"
        android:background="@drawable/ic_clear_black"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

</RelativeLayout>

可绘制椭圆形

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="#ffffff"/>
    <stroke android: android:color="#ff00ffff"/>
    <corners android:radius="24dp" />
</shape>

在应用启动时隐藏editText的焦点

ma​​nifest 文件中的类名的 activity 标记中添加这些行

<activity
        android:name=".yourActivityName"
        android:windowSoftInputMode="stateAlwaysHidden"
        android:focusable="true"
        android:focusableInTouchMode="true"
        />

您可以设置 Layout 的属性,例如 android:descendantFocusability="beforeDescendants"android:focusableInTouchMode="true"

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
xmlns:ads="http://schemas.android.com/apk/res-auto"
>

【讨论】:

问题是我不知道怎么把X放在editText字段里。 @Paul 尝试上面的 xml 并在活动中执行 clicklistener @Paul 试试这个带有自定义形状和自定义布局的 xml Thx,因为我只有一个字段EditText,只需启动应用程序,立即将焦点放在该字段上。启动时不做有什么诀窍吗? 对不起,我听不懂你在说什么。我从你的评论中得到的随机想法是你想在应用启动时禁用edittext的焦点吗?【参考方案3】:

您可以使用onTouchEvent() 确定用户触摸“明文”图标

@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) 
    if (event.getAction() == MotionEvent.ACTION_UP) 
        final int x = (int) event.getX();
        final int y = (int) event.getY();
        if (x >= (this.getRight() - drawableClearText.getBounds().width()) && x <= (this.getRight() - this.getPaddingRight())
                && y >= this.getPaddingTop() && y <= (this.getHeight() - this.getPaddingBottom())) 
            this.setText("");
            event.setAction(MotionEvent.ACTION_CANCEL);
        
    
    return super.onTouchEvent(event);

要管理图标状态(可见、不可见),您可以使用TextViewCompat.setCompoundDrawablesRelative(your_edit_text, compounds[0], compounds[1], drawableClearText, compounds[3])

【讨论】:

等等,我不明白。如何将 X 放在 editText 字段中。布局说话? 我更喜欢将 drawableEnd 设置为以编程方式编辑文本并使用代码管理他的状态的方式。我的代码部分你可以在答案中查看。 我不明白我应该从哪里得到 this.getRight (), this.getPaddingBottom (), .ecc.. 我试过这个:***.com/a/36913336/8024296 但它似乎不太好用。

以上是关于带有清除按钮的 Android java android.support.design.widget.TextInputLayout的主要内容,如果未能解决你的问题,请参考以下文章

带有背景色调的浮动操作按钮导致错误

带有图标/按钮的 Android EditText

带有“清除按钮”的 UI 自动化清除文本字段

在 Android 中设计一个按钮

java.lang.NoSuchMethodError public default void android.content.ServiceConnection.onBindingDied(andr

如何在 wpf 中实现带有清除按钮的文本框?