单词刷入后,EditText不会添加空格

时间:2016-05-17 23:48:19

标签: android android-layout android-edittext swipe android-alertdialog

我有一个使用谷歌键盘的Android手机。在任何其他应用程序中的任何EditText字段上,如果我使用滑动方法输入文本,则会在每个单词后面添加一个空格。但是,我编写了自己的应用程序,当我使用滑动方法在我的EditText字段上输入文本时,它不会添加一个空格。这非常烦人。

我有一个添加了线性视图的AlertDialog。在该线性视图上有一个文本EditText。这是我创建EditText并将其添加到视图的代码:

final EditText titleBox = new EditText(this);
titleBox.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT |
    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES |
    InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE);
titleBox.setHint("Title");
layout.addView(titleBox);

为什么不在我的文字之间添加空格的任何想法?

这被标记为可能重复,但该问题是关于不允许第一个角色成为空格....我想要在通过键盘滑动输入的单词之后允许空格。

更新

这是类似页面的整个方法,它有相同的问题,它比我正在排除故障的初始页面稍微复杂一点。这个甚至没有关联的LinearLayout:

private void addBudget(final Budget budget) {
EditText taskEditText = new EditText(this);
        taskEditText.setId(R.id.add_budget_text);
             taskEditText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

String dialogTitle = "Add budget";
final AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle(dialogTitle)
                .setMessage("What do you want to call this budget?")
                .setView(taskEditText)
                .setPositiveButton("Save", new    DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // final String task = ;
                        SQLiteDatabase db = mHelper.getWritableDatabase();


                        Budget lBudget = new Budget();
                        if (budget != null) {
                            lBudget = budget;
                        }
                        EditText taskEditText = (EditText) findViewById(R.id.add_budget_text);
                        lBudget.title = String.valueOf(taskEditText.getText());

                        // Init custom budget object //new Budget(){{ title=task; id = budgetID;}}
                        int retId = mHelper.saveBudget(db, lBudget);

                        db.close();
                        int retRow = updateUI(retId);
                        mTaskListView.smoothScrollToPosition(retRow);

                    }
                })
                .setNegativeButton("Cancel", null)
                .create();
// Handle done on soft keyboard
        taskEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                int result = actionId & EditorInfo.IME_MASK_ACTION;
                if (result == EditorInfo.IME_ACTION_DONE) {
                    dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
                    return true;
                }
                return false;
            }
        });
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        dialog.show();

    }

3 个答案:

答案 0 :(得分:1)

我不知道你是否解决了,我今天遇到了同样的问题并找到了解决问题的方法。

我看到了滑动的“额外”表现,有时它显示“空白”,有时不显示。

我发现检查它是否显示以及是否没有添加它的方式是:

        editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            checkCancel();
            int compare = count-before;
            if(compare>1){
                String text = editText.getText().toString();
                String lastChar = (text.substring(text.length()-1,text.length()));
                if(!lastChar.equals(" ")){
                    String plus = text+" ";
                    editText.setText(plus);
                    editText.setSelection(editText.getText().length());
                }
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }

        } );

你可以看到,onTextChanged可以使用变量“before”和“count”,如果比较(最后一个单词和当前单词之间的差异)大于1,则它是Swipe输入的单词。然后你可以检查是否显示了“blankspace”,如果没有,只需添加它并随你做任何你需要的东西。

希望它有所帮助!

答案 1 :(得分:0)

你可以尝试一下吗?将过滤器添加到editText中。我用它在我的应用程序上输入代码。

EditText et = (EditText) findViewById(R.id.edit_text);
et.setFilters(new InputFilter[] {
new InputFilter() {
    @Override
    public CharSequence filter(CharSequence charSequence, int start, int end, Spanned spanned, int start, int end {
           if(charSequence.equals("")){
                return charSequence;
           }
           if(charSequence.toString().matches("[a-zA-Z ]+")){
                return charSequence;
           }
           return "";
        }
    }
});

答案 2 :(得分:0)

所以我卸载了谷歌键盘并重新安装,然后我将构建更改为发布。其中一件事就是解决了这个问题。