【发布时间】:2016-05-11 00:31:57
【问题描述】:
我正在尝试找出一个很好的解决方案来扩展 EditText 以允许我将其他视图分层。我正在尝试制作一个自定义视图,它是一个 EditText,顶部有一个 TextView 以显示字符数,顶部有一个 ImageView 用于清除按钮。
目前,我正在使用扩展 FrameLayout,但这并没有给我我正在寻找的控制/灵活性。比如我不能使用 ButterKnife 的 @OnTextChanged,因为它需要一个 TextView,除非我通过它们,否则我无法直接访问 EditText 的任何 XML 属性。
感谢您的宝贵时间。
ClearableEditText.java
public class ClearableEditText extends FrameLayout {
public ClearableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
protected void init() {
View inflate = inflate(getContext(), R.layout.clearable_edit_text, this);
ButterKnife.bind(this, inflate);
...
}
...
}
R.layout.clearable_edit_text.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/clearable_edit"
style="@style/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" />
<ImageView
android:id="@+id/clearable_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:src="@drawable/button_clear"
android:visibility="invisible"
tools:visibility="visible" />
<TextView
android:id="@+id/clearable_count"
style="@style/edit_text_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
tools:text="1200" />
</FrameLayout>
【问题讨论】:
-
当您输入编辑文本时,仅使用此布局并在文本视图中显示数字不能实现相同的功能吗?清除编辑文本也是如此。在我看来,在这里使用 ButterKnife 有点过头了。为可以以其他方式安排的功能创建自定义视图也是如此。如果我遗漏了什么,我想了解为什么要走这么长的路。
-
我曾经使用
将它放在布局中,但问题是这个功能遍布我的应用程序。我正在尝试通过将其变为一个干净的自定义视图来重现用于处理计数器/清除的所有额外代码。
标签: java android android-edittext android-custom-view butterknife