Вопрос по android – Отключение кнопки отправки на клавиатуре, когда еще ничего не набрано [Android]

13

Я создаю опцию поиска в приложении для Android.

После нажатия кнопки "Поиск" наscreen-keyboard событие запускается, который отправляет запрос на сервер. Я хочу отключить функцию & quot; Поиск & quot; кнопка наscreen-keyboard когда текст не был введен в него, соответствующийEditText еще.

Я добавил это кEditText:

android:imeOptions="actionSearch"

Вот почему на клавиатуре есть «Поиск». кнопка вместо по умолчанию "ввод" / "готово". (На всякий случай, если вам интересно).

Ваш Ответ

7   ответов
-1

OnEditorActionListener в текстовое поле и верните true из его метода onEditorAction, когда actionId равенIME_ACTION_DONE, Это предотвратит скрытие мягкой клавиатуры:

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;
    }
  }
});

Отослать этоССЫЛКА НА САЙТ ССЫЛКА НА САЙТ

Error: User Rate Limit Exceeded
0

Make Extends 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);
    }

Вы также можете сделать это с помощью ключа поиска:

mCustomEditText.setOnEditorActionListener(new OnEditorActionListener() {

            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if(actionId==EditorInfo.IME_ACTION_SEARCH && event.getAction()==KeyEvent.KEYCODE_SEARCH){
                    System.out.println("Search pressed.........");
                }
                return false;
            }
        });
Error: User Rate Limit ExceededdispatchKeyEventPreImeError: User Rate Limit Exceeded Pieter888
Error: User Rate Limit ExceededdispatchKeyEventPreImeError: User Rate Limit ExceededmCustomEditText.setOnEditorActionListenerError: User Rate Limit Exceeded
16

тся согласиться с проверкой на наличие пустой строки в обработчике действий редактора.

Error: User Rate Limit Exceeded Pieter888
0

OnKeyListener в вашемActivity.

добавьте этот keyListener к вашемуEditText.

 myEditText.setOnKeyListener(this);  

переопределениеonKey() в вашемActivity.

@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 пуст, и вы нажимаете кнопку поиска.

Note: onKey() вызывается дважды один раз для keyDown, а затем для KeyUp. вам придется отфильтровать его, используя экземпляр KeyEvent, полученный в качестве параметра вonKey() метод.

Error: User Rate Limit Exceeded
-1
    SearchInput.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            if( SearchInput.getText().toString().length() == 0 )
            {
                Search.setClickable(false);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
            Search.setClickable(false);


        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            Search.setClickable(true);
        }

    });

    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"

Я не могу установитьflagNoEnterAction = "false"    Но кто-то может помочь вам

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Pieter888
Error: User Rate Limit Exceeded Pieter888
0

это не тот результат, который вы хотели, но, возможно, самый близкий, который вы можете получить.

1) Удалить андроид: imeOptions = & quot; actionSearch & quot; из XML

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){}
    });
Error: User Rate Limit ExceededImeOptionsError: User Rate Limit Exceeded Pieter888
3
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();

Похожие вопросы