我如何自定义给定图中所示的editext的输入类型。基本上我的要求是,edittext仅应显示最后3或4位数字,而在密码模式下应仅显示前12位数字。

===============>>#1 票数:0

没有这样的内置功能。 因此,您必须自己做。 更改文本后,必须对文本进行更改。 要这样做。

如果通过扩展EditText创建自定义editText,则可以覆盖onTextChanged方法并处理更改。

或者,您可以使用TextWatcher轻松更改。

因此,当更改文本时,将最后3位数字除外的数据设置为*。

但是请记住,您必须使用String字段将原始数据存储在该字段中。

===============>>#2 票数:0 已采纳

您需要在EditText上添加一个TextWatcher

int characterCount = 0;
int asteriskCount = 0;
CharSequence input = null;
input.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        characterCount = count;
        //update input sequence based on changes.
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //update input sequence based on changes.
    }

    @Override
    public void afterTextChanged(Editable s) {
        if (asteriskCount != characterCount) {
            //make the visible sequence here.
            CharSequence seq = "";
            for (int i = 0; i < (characterCount <= 12 ? characterCount : 12); i++) {
                seq = seq + "*";
            }
            if (characterCount > 12) {

                for (int i = 12; i < characterCount; i++) {
                    seq = seq + characterCount.charAt(i);
                }
            }
            asteriskCount = characterCount;
            input.setText(seq);
        }
    }
});

===============>>#3 票数:-2

以下是我的TextWatcher的代码段:

        private boolean spaceDeleted;
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            characterCount = start;
            //update input sequence based on changes.

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
             // check if a space was deleted
            CharSequence charDeleted = s.subSequence(start, start + count);
            spaceDeleted = " ".equals(charDeleted.toString());

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.length()>12){
                return;
                }
            System.out.println("Character Count in afterTextChange->"+characterCount);
            System.out.println("Editable Character->"+s);
            ccNumber.removeTextChangedListener(this);
             // record cursor position as setting the text in the textview
            // places the cursor at the end
            int cursorPosition = ccNumber.getSelectionStart();
            String withSpaces = formatText(s);
            ccNumber.setText(withSpaces);
            // set the cursor at the last position + the spaces added since the
            // space are always added before the cursor
            ccNumber.setSelection(cursorPosition + (withSpaces.length() - s.length()));

            // if a space was deleted also deleted just move the cursor
            // before the space
            if (spaceDeleted) {
                ccNumber.setSelection(ccNumber.getSelectionStart() - 1);
                spaceDeleted = false;
            }

            // enable text watcher
            ccNumber.addTextChangedListener(this);



        }

        private String formatText(CharSequence s) {
            // TODO Auto-generated method stub

            StringBuilder formatted = new StringBuilder();
            int count = 0;
            /* if(s.length()<12){
                formatted.append("*");
            }else{
                formatted.append(s.charAt(characterCount));
            }*/
            for (int i = 0; i < s.length(); ++i)
            {

                formatted.append("*");

                /*if (Character.isDigit(s.charAt(i)))
                {
                    if (count % 4 == 0 && count > 0)
                        formatted.append(" ");
                    formatted.append(s.charAt(i));
                    ++count;
                }*/
            }
            return formatted.toString();
        }
    });

  ask by Amritesh translate from so

未解决问题?本站智能推荐:

2回复

如何在Android中滚动自定义editext

我有一个自定义的EditText,它在其touch事件中编写了用于显示keyboardview的代码。现在我无法滚动它,并且单击它无法将光标定位在触摸位置。我找到了将光标定位在可以工作的位置的代码仅在edittext不滚动时更正。 代码是: 请帮我谢谢
1回复

如何从Android中的mysql数据库获取自定义列表视图editext中editext的所有值

我正在从mysql数据库中获取菜单名,并使用基本adapter。追加到自定义列表视图中的edittext。现在,我在editext值中更改了一些菜单名。 现在我要从头到尾获取所有editext 我的基础adapger班 请帮我
2回复

android无法在自定义对话框中的listview中使用所有editext值

我在自定义对话框中有一个listview 。 在该列表中,每行有一个Text字段和一个Edittext 。 我正在使用editTextWatcher处理精确位置上的所有edittext值。 达到这个工作正常。 我在listView下的该对话框上有一个保存按钮。 点击保存后,我想将所有的
2回复

如何在android的自定义列表视图中从第一到最后更改editext值

我从数据库中获取菜单名,然后追加到自定义listview edittext。 现在我正在更改edittext中的一些值。 我想将所有具有更改的edittext值的值放入数组 我尝试此代码(基本适配器类) 请帮我
4回复

RTL支持自定义editext为drawable left

我有一个edittext,左边有一个不可编辑的前缀editext,但现在我想让它支持rtl。 尽管我努力,但我无法支持rtl。 我的Custom类如下, 我这个类的xml调用如下,
1回复

Android中的Editext和RadioButton

我有两个EditText框和一个包含两个单选按钮的RadioGroup。 当我开始在任何编辑文本框中输入输入时,必须自动检查所有单选按钮(如果已经检查了任何一个按钮),并且还应清除另一个编辑文本。 如果我检查两个单选按钮中的任何一个,则应清除所有编辑文本框(如果它们有任何输入的数据)。 这
2回复

Android中的Editext Focuse

在我的应用程序中,我使用可扩展列表视图中的编辑文本视图。 当我尝试在编辑文本中添加文本时,editext的焦点会自动更改。 我无法正确地在编辑文本中输入文本。 我该怎么办? 编辑文本xml-
2回复

逐行定义Editext Android

我想写这样的东西: 今天是星期一//这是20个字符,我现在想跳到新行 Tommorow是// 20个字符,它跳过了一行,因为最后一个输入是完整的单词。 星期一//由于跳过了20个字符的单词,所以跳过了此操作。 当它达到20个字符时,如何达到每行最大字符数并分配回
2回复

为什么我将任何数据输入到edittext中,而该数据未在android的editext中打印?

我在这里用edittext做一个应用程序。 我需要输入一些数据,例如名称,但是当我在未显示的edittext中输入数据时。 当时我在另一个系统中运行的同一个应用程序运行良好。 但是在某些系统中它不起作用。 问题是什么? 我的代码:
1回复

Android-在Editext中插入日期

我有一个带有日历视图的屏幕,如果在任何日期单击都会进入一个新屏幕,其中包含用于输入日期和其他数据的edittext。我希望单击的日期将出现在EditText(id = txtDate)中。调用该屏幕后,我尝试使用Toast的示例在Edittext中输入日期: 我改变了: 这没用。