【问题标题】:EditText not adding space after word swiped inEditText 没有在单词刷入后添加空格
【发布时间】:2016-09-27 15:40:13
【问题描述】:

我有一部使用谷歌键盘的安卓手机。在任何其他应用程序的任何 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();

    }

【问题讨论】:

  • 滑动文本是什么意思?
  • 我想你可以看看这个stackoverflow.com/a/19514175/5319409希望对你有帮助
  • 滑动我的意思是,您可以点击按键,或使用滑动动作在字段中输入文本。当然,您可以手动键入空格键,但是在滑动时,它会为您处理单词之间的空格。在我的应用中刷卡不输入空格键。
  • @AndrewIndayang 这不是重复的。该链接问题试图不允许空格作为输入的第一个字符。这几乎是相反的。我需要允许在使用谷歌键盘上的滑动动作输入的单词之间添加空格。我在手机上尝试过的所有其他应用程序都可以运行,但我可以让它在我自己的应用程序中运行。

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


【解决方案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 输入的一个单词。然后您可以检查是否显示了“空白空间”,如果没有,只需添加它并使用它执行任何您想要的操作。

希望对你有帮助!

【讨论】:

    【解决方案2】:

    你能试试这个吗?将过滤器添加到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 "";
            }
        }
    });
    

    【讨论】:

    • 不幸的是,这没有任何效果。我还尝试将 EditText 更改为不是最终的,这也不起作用
    【解决方案3】:

    所以我卸载了谷歌键盘并重新安装,并将构建更改为发布。这两件事中的一件解决了它。

    【讨论】:

    • 那你在其他手机上试过了吗?
    • 是的,在我的妻子身上,但那是键盘的全新安装,并且是从市场上安装的。这就是启发我采取行动的原因
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多