我有一个使用谷歌键盘的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();
}
答案 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 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)
所以我卸载了谷歌键盘并重新安装,然后我将构建更改为发布。其中一件事就是解决了这个问题。