gpt4 book ai didi

java - Android - 自定义 View - 使用顶部 View 扩展 EditText

转载 作者:行者123 更新时间:2023-12-01 09:56:50 26 4
gpt4 key购买 nike

我正在尝试找出一个关于如何扩展 EditText 的好解决方案,以允许我将其他 View 分层在顶部。我正在尝试创建一个自定义 View ,它是一个 EditText,顶部有一个 TextView 用于显示字符数,顶部有一个 ImageView 用于显示清除按钮。

目前,我正在扩展 FrameLayout,但这并没有给我带来我正在寻找的控制/灵 active 。例如,我无法使用 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>

最佳答案

我发现在这些情况下使用 xml 中的空布局会更简单,稍后我会在运行时使用我想要的任何元素填充该布局。示例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">

<TextView ..... />
<Button........./>
.
.
.
<LinearLayout
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>


</LinearLayout>

在 Activity 中

LayoutInflater inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout container = (LinearLayout)findViewById(R.id.container);
MyComplexView myComplexView = new MyComplexView(inflater, container);

其中 MyComplexView:

    public static class MyComplexView{

LinearLayout container;
LayoutInflater inflater;
TextView textView ;
ImageView img;
EditText editText;

public MyComplexView(LinearLayout container,LayoutInflater inflater ){
this.container = container;
this.inflater = inflater;
View v = (View) inflater.inflate(R.layout.mylayout, null);
container.addView(v);
textView = (TextView)v.findViewById(R.id.textview);
img = (ImageView)v.findViewById(R.id.imgaviev);
editText = (EditText)v.findViewById(R.id.edittext);
// assign whatever text change listeners or on click listeners you want
}

public void makeEditTextMultiline(boolean flag){
if(flag){
edittext.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_MULTI_LINE);
}
else{
edittext.setSingleLine(true);
}
}
public String getEditTextText(){
return editText.getText().toString();
}

}

之后,您可以在 MyComplexView 类中创建各种方法来操作该对象。

我认为这种方式比扩展 View 类更容易。

关于java - Android - 自定义 View - 使用顶部 View 扩展 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com