禁用键盘';当尚未键入任何内容时,单击“发送”按钮[Android]
我正在android应用程序中创建一个搜索选项 按下屏幕键盘上的“搜索”后,将触发一个事件,将查询发送到服务器。 我要做的是,当没有在相应的禁用键盘';当尚未键入任何内容时,单击“发送”按钮[Android],android,android-softkeyboard,android-xml,Android,Android Softkeyboard,Android Xml,我正在android应用程序中创建一个搜索选项 按下屏幕键盘上的“搜索”后,将触发一个事件,将查询发送到服务器。 我要做的是,当没有在相应的EditText中键入文本时,禁用屏幕键盘上的“搜索”按钮 我将此添加到EditText: android:imeOptions=“actionSearch” 这就是为什么键盘上有一个“搜索”按钮,而不是默认的“回车”/“完成”。(以防万一你想知道) 或者试试这个。。!为幻想的错误迪洛 Search.setOnClickListener(new O
EditText
中键入文本时,禁用屏幕键盘上的“搜索”按钮
我将此添加到EditText
:
android:imeOptions=“actionSearch”
这就是为什么键盘上有一个“搜索”按钮,而不是默认的“回车”/“完成”。(以防万一你想知道)
或者试试这个。。!为幻想的错误迪洛
Search.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if( searchinput.getText().toString().length() == 0 )
{
searchinput.setError( "Enter something Blah Blah..!" );
}
else
{
// Original Functions Goes Here
}
在编辑文本中使用以下代码,
android:imeOptions="flagNoEnterAction"
我无法设置flagnointeraction=“false”
但是有人可以帮你试试这个(可能不是你想要的确切结果,但可能是你能得到的最接近的结果)
1) 从xml中删除android:imeOptions=“actionSearch”
2) 创建一个自定义TextWatcher addTextChangedListener(TextWatcher watcher),它允许您动态更改键盘,如下所示
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
if(firstTime){//a boolean you init to true
firstTime = false;
textMessage.setImeOptions(EditorInfo.IME_ACTION_SEARCH);
}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){}
});
您需要在其中创建自定义EditText、扩展EditText和@Override Below方法 下面是示例代码
private ArrayList<Integer> keysToIgnore = new ArrayList<Integer>();
public EditTextCus(Context context) {
super(context);
}
public EditTextCus(Context context, AttributeSet attrs){
super(context, attrs);
}
public EditTextCus(Context context, AttributeSet attrs, int defStyle){
super (context, attrs, defStyle);
}
private Boolean keyInIgnoreList(int keyCode) {
for (Integer i:keysToIgnore){
int key = i.intValue();
if (key == keyCode)
return true;
}
return false;
}
public void addKeyToIgnoreList(int keyCode) {
if (!keyInIgnoreList(keyCode)){
keysToIgnore.add(keyCode);
}
}
public void removeKeyFromIgnoreList(int keyCode) {
if (keyInIgnoreList(keyCode)){
Integer key=new Integer(keyCode);
keysToIgnore.remove(key);
}
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
//Log.d("ws", "dispatchKeyEventPreIme(" + event + ")");
// swallow the any key in the ignore list
if (keyInIgnoreList(event.getKeyCode())) {
KeyEvent.DispatcherState state = getKeyDispatcherState();
if (state != null) {
if (event.getAction() == KeyEvent.ACTION_DOWN
/*&& event.getRepeatCount() == 0*/) {
state.startTracking(event, this);
return true;
} else if (event.getAction() == KeyEvent.ACTION_UP
&& !event.isCanceled() && state.isTracking(event)) {
return true;
}
}
}
}
return super.dispatchKeyEventPreIme(event);
}
在您的
活动中实施OnKeyListener
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(v.getId() == R.id.myEditText)
{
if(KeyEvent.KEYCODE_ENTER == keyCode)
{
if(myEditText.getText().toString().equals("") || myEditText.getText().toString().equals(null))
{
Toast.makeText(KeyboardTestActivity.this, "Event Eaten", Toast.LENGTH_SHORT).show();
Log.e("onKey", "Event Eaten");
return true;
}
}
}
return false;
}
将此keyListener添加到您的EditText
myEditText.setOnKeyListener(this);
覆盖活动中的onKey()
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(v.getId() == R.id.myEditText)
{
if(KeyEvent.KEYCODE_ENTER == keyCode)
{
if(myEditText.getText().toString().equals("") || myEditText.getText().toString().equals(null))
{
Toast.makeText(KeyboardTestActivity.this, "Event Eaten", Toast.LENGTH_SHORT).show();
Log.e("onKey", "Event Eaten");
return true;
}
}
}
return false;
}
当您的EditText
为空并且您按下搜索键时,它将显示一个祝酒词
注意:onKey()
被调用两次,一次用于keyDown,另一次用于keydup。您必须使用KeyEvent实例对其进行过滤,该实例在onKey()
方法中作为参数接收。附加到文本字段,并在actionId等于时从其onEditorAction方法返回true。这将防止软键盘隐藏:
EditText txtEdit = (EditText) findViewById(R.id.txtEdit);
txtEdit.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// your additional processing...
return true;
} else {
return false;
}
}
});
请参阅此我们无法禁用android键盘上的操作按钮。您必须在编辑器操作侦听器中检查空字符串。只有当搜索按钮是我在应用程序中自己制作的按钮时,这才有效。但我说的是禁用android键盘上的enter/search键。我不会投票给这个答案,因为它不是我问题的有效答案。我想禁用android屏幕键盘上的搜索按钮。我的应用程序中没有按钮。答案已编辑,添加了第三个代码,可能至少对您或其他人有帮助。我尝试过,但在创建视图后无法更改按钮的ImeOptions
。但无论如何,这并不是一个正确的解决方案,因为我希望在键入内容之前禁用enter/search按钮。如果这个答案有效,它将在输入按钮上显示文本“完成”,而不是“搜索”。我只想让按钮变灰或向用户显示他/她不能在空字符串上搜索。即使在添加了enter(66)和search(84)中的键码后,它仍然不会忽略它。在取消记录事件的行的注释后,我发现它从未到达dispatchKeyEventPreIme
。没有任何内容输出到控制台。@Pieter888当搜索的硬键(如HTC phone中的)时,您将看到dispatchKeyEventPreIme
此方法将调用接收软键盘事件,对于接收软键盘事件,您可以尝试此mCustomEditText.setOnEditorActionListener
作为应答中更新的内容。尝试此方法以输入软键盘的键。他想禁用操作按钮,而不是阻止键盘隐藏。这太糟糕了。我想检查一个空字符串就行了。我会选择这个答案,因为它是我问题的真实答案,而不仅仅是备选方案。
setOnEditorActionListener(new TextView.OnEditorActionListener() {
if (txtView.getText().toString().trim().length() == 0) {
Toast.makeText(getApplicationContext(), "Please Enter some text to search",
Toast.Short).show();
return true; // returning true will keep the keyboard on
}
else search();
setOnEditorActionListener(new TextView.OnEditorActionListener() {
if (txtView.getText().toString().trim().length() == 0) {
Toast.makeText(getApplicationContext(), "Please Enter some text to search",
Toast.Short).show();
return true; // returning true will keep the keyboard on
}
else search();