java - Android 在有字母时禁用文本观察器

标签 java android android-textwatcher

我的代码需要帮助。

我有一个editText,用户可以在其中输入商店的营业时间和结束时间,并且有一个带有“关闭”的复选框

用户输入开始时间09:00,然后使用文本观察器添加一个空格和破折号,然后用户输入结束时间19 :00,这样最后的时间就是 09:00 - 19:00

例如,如果商店周六不营业,则用户必须单击复选框,并且当单击复选框时,editText > 已设置文本并显示“已关闭”。

问题是,当我使用文本观察器时,如果长度等于6,它会添加连字符,然后当用户单击复选框而不是写“已关闭”时,它会显示“关闭-”。

如何删除该破折号?

editText 中只有字母时,Text Watcher 会关闭。

有人能解决我的问题吗?你有什么建议吗?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_insert__orari);

        lunedi_inizio_uno = (EditText)findViewById(R.id.editText_uno_lunedi_inizio);

        lunediUno = (CheckBox)findViewById(R.id.checkBox_uno_lunedi);

        lunedi_inizio_uno.addTextChangedListener(new TextWatcher() {

                    int keyDell;

                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                        lunedi_inizio_uno.setOnKeyListener(new View.OnKeyListener() {
                            @Override
                            public boolean onKey(View v, int keyCode, KeyEvent event) {

                                if (keyCode == KeyEvent.KEYCODE_DEL)
                                    keyDell = 1;
                                int prevL = 0;
                                return false;
                            }
                        });

                        if (keyDell == 0) {
                            int len = lunedi_inizio_uno.getText().length();

                            if(len == 5) {
                                lunedi_inizio_uno.setText(lunedi_inizio_uno.getText() + " ");
                                lunedi_inizio_uno.setSelection(lunedi_inizio_uno.getText().length());
                            }if(len == 6) {
                                lunedi_inizio_uno.setText(lunedi_inizio_uno.getText() + "-");
                                lunedi_inizio_uno.setSelection(lunedi_inizio_uno.getText().length());
                            }if(len == 7) {
                                lunedi_inizio_uno.setText(lunedi_inizio_uno.getText() + " ");
                                lunedi_inizio_uno.setSelection(lunedi_inizio_uno.getText().length());
                            }
                        } else {
                            keyDell = 0;
                        }

                    }

                    @Override
                    public void afterTextChanged(Editable arg0) {
                                    }

                    @Override
                    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                        // TODO Auto-generated method stub
                    }
                });

                lunediUno.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                if (((CheckBox) v).isChecked()) {
                                    lunedi_inizio_uno.setText("Chiuso");

                                }


                            }
                        });

                    }

最佳答案

问题我解决了,在长度等于5的地方加上“-”就可以了,消除了长度等于6和7的条件。

关于java - Android 在有字母时禁用文本观察器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516718/

相关文章:

java - Spring @Transactional DAO 调用返回相同的对象

java - ElementCollections 在父级的 id 上唯一,指定值

android - 在 RecyclerView 的 TextWatcher.onTextChanged() 中使用时,notifyDataSetHasChanged() 会抛出错误

android - TextWatcher onTextChanged 不适用于软键盘自动完成/建议词

android - Swift 4 等效于 Kotlin "anonymous class"表示法

android - Kotlin:EditText 在 afterTextChanged() 中为空

java - 提供连接的 OutputStream 和 InputStream 的最佳实践

Java split(),使用包含特定字符的整个单词作为分隔符

php - PHP Webhost操作检查

android - 如何覆盖 edittext 的 Theme.AppCompat.Light.DarkActionBar 主题