如何在代码中获取EditText maxLength设置

Vin*_*ier 20 android android-edittext

我希望看到maxLength一个EditText在运行时能够做出文本显示决定.
那可能吗?

这是对我不想做的事情的描述.

我有一个包含许多行的ListView,每行都有一个EditText和一个TextView.
我已经创建了ArrayAdapter的子类,以便能够提供我想要放在每行的EditText中的String.
我已经android:maxLength="12"在XML文件中设置了.
我想在EditText字段中显示一个数字,但如果我要显示的数字超过android:maxLength="12"我想要显示"错误消息".

我宁愿不在我的ArrayAdapter子类中硬编码12.

可能有一个简单的解决方案,但我还没有找到它.
(android第一次......)

Mar*_*yer 37

这应该工作:

editText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(12) });
Run Code Online (Sandbox Code Playgroud)


Sha*_*wat 34

只有有限的参数有吸气剂,所以我认为你不能读它.

因此在values文件夹中写入长度(Say 12)并在xml layout和arrayAdapter中使用它.现在它没有硬编码.

1)在值*中创建integer.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="integer" name="max_length">12</item>
</resources>
Run Code Online (Sandbox Code Playgroud)

2)在布局中

<TextView  android:id="@+id/tv"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:maxLength="@integer/max_length"
    />
Run Code Online (Sandbox Code Playgroud)

3)在ArrayAdapter中:

int maxLength = getResources().getInteger(R.integer.max_length);
Run Code Online (Sandbox Code Playgroud)


小智 10

从api 21你可以这样做:

for (InputFilter filter : mEditText.getFilters()) {
        if (filter instanceof InputFilter.LengthFilter) {
            ((InputFilter.LengthFilter) filter).getMax());
        }
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人.


小智 6

扩展编辑文本并从构造函数的属性集中检索值。

公共类MyEditText扩展了EditText {

public static final String XML_NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android";
private int mMaxLength;

public MyEditText(Context context) {
    super(context, null);
}

public MyEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    mMaxLength = attrs.getAttributeIntValue(XML_NAMESPACE_ANDROID, "maxLength", -1);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

Kotlin 一行解决方案 - 返回最大长度,如果未设置则返回 null

view.filters.filterIsInstance<InputFilter.LengthFilter>().firstOrNull()?.max
Run Code Online (Sandbox Code Playgroud)

作为扩展:

val TextView.maxLength: Int?
    get() = filters.filterIsInstance<InputFilter.LengthFilter>().firstOrNull()?.max
Run Code Online (Sandbox Code Playgroud)