带有清除按钮的 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的焦点
在 manifest 文件中的类名的 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的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NoSuchMethodError public default void android.content.ServiceConnection.onBindingDied(andr