【发布时间】:2018-01-15 11:27:32
【问题描述】:
我正在开发一个 Android 应用程序,我想在其中设置输入过滤器以在 EditText 中只允许 21 个字符。
我使用的XML代码sn-p如下
<EditText
android:id="@+id/screen_name"
android:layout_width="300dp"
android:layout_height="match_parent"
android:background="#00000000"
android:enabled="false"
android:gravity="center"
android:hint="Enter your screen name"
android:maxLength="21"
android:text="Raghunathan KE"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold"
android:inputType="text"
android:isScrollContainer="true"
android:focusable="true"/>
而且,在活动中,
InputFilter lengthFilter = new InputFilter.LengthFilter(21) {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if (dest.length() > getMax()) {
Toast.makeText(Profile.this, "Screen name should not exceed more than 21 characters", Toast.LENGTH_LONG).show();
}
return super.filter(source, start, end, dest, dstart, dend);
}
@Override
public int getMax() {
return super.getMax();
}
};
screenname.setInputFilters(new InputFilter[]{lengthFilter});
它不允许输入超过 21 个字符,但我无法提示用户长度不能超过 21 个字符,因为 filter 回调中的 Toast 消息不显示。
我尝试过使用TextWatcher,但它在第 21 个字符之后没有被调用,因为我使用InputFilter 将限制设置为 21。
任何人,请帮我找到解决方案。
【问题讨论】:
-
getmax() 是否返回 21?如果是这样,也许你需要一个 >= 而不是 > 来让你的吐司出现?
-
当然它不会被显示,因为长度不能>然后是你在 xml 中设置的 Max。所以这个 "dest.length() > getMax()" 表达式总是假的。
-
如果您想允许用户输入超过 21 个字符,那么您显然必须取消 21 个字符的限制。您可能想要一个
TextWatcher,当它正在观看的EditText字段包含超过21 个字符时,它将启动吐司/执行某些操作。 -
条件应该是
if (dest.length() == getMax())并且 getMax() 应该返回 21 。 -
为了实现你的目标,你已经回到了文本观察器,但没有设置最大长度。只需验证观察者中的数据,如果文本超过 21 个字符,则仅显示 toast 并删除多余的字符。
标签: java android input-filter