禁用键盘';当尚未键入任何内容时,单击“发送”按钮[Android]

禁用键盘';当尚未键入任何内容时,单击“发送”按钮[Android],android,android-softkeyboard,android-xml,Android,Android Softkeyboard,Android Xml,我正在android应用程序中创建一个搜索选项 按下屏幕键盘上的“搜索”后,将触发一个事件,将查询发送到服务器。 我要做的是,当没有在相应的EditText中键入文本时,禁用屏幕键盘上的“搜索”按钮 我将此添加到EditText: android:imeOptions=“actionSearch” 这就是为什么键盘上有一个“搜索”按钮,而不是默认的“回车”/“完成”。(以防万一你想知道) 或者试试这个。。!为幻想的错误迪洛 Search.setOnClickListener(new O

我正在android应用程序中创建一个搜索选项

按下屏幕键盘上的“搜索”后,将触发一个事件,将查询发送到服务器。 我要做的是,当没有在相应的
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();