2012-05-07 12 views
13

アンドロイドアプリケーションで検索オプションを作成しています。何も入力されていないときにキーボードの送信ボタンを無効にする[Android]

スクリーンキーボードで「検索」を押すと、クエリがサーバーに送信されます。 画面キーボードのの「検索」ボタンを無効にするには、対応するテキストが入力されていないときはEditTextです。

私はEditTextにこれを追加しました:

android:imeOptions="actionSearch"

を「完了」/「入力」キーボードがデフォルトの代わりに「検索」ボタンを持っているだから、なぜです。 (ちょうどあなたが不思議に思っている場所の場合)。

答えて

16

を参照してください。エディタアクションリスナーで空の文字列をチェックすることで解決する必要があります。

+0

それは悪いです。私は空の文字列をチェックする必要がありますと思います。私はこの答えを選ぶつもりです。なぜなら、それは私の質問に対する本当の答えなので、選択肢だけではありません。 – Pieter888

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

    }); 

またはこれを試してみてください...!派手なエラーdilog

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 
      } 

のために、私はflagNoEnterAction = "false" を設定することはできませんよ。しかし、誰かがあなたが

+0

これは、検索ボタンがアプリ内で自分で作成したボタンだった場合にのみ機能します。しかし、私はアンドロイドキーボードの入力/検索キーを無効にすることについて話しています。 – Pieter888

+0

これは私の質問に対する有効な答えではないので、私はこの回答をupvoteしません。アンドロイドのオンスクリーンキーボードの検索ボタンを無効にしたい私のアプリケーションのボタンではありません。 – Pieter888

+0

回答編集済みの3番目のコードが追加されました。あなたや他の誰かが助けてくれるかもしれません。 – VenomVendor

0

は(これを試すことができ、テキスト編集に

android:imeOptions="flagNoEnterAction" 

を次のコードを使用しますあなたが望む正確な結果ではないかもしれませんが、あなたが得られる最も近いものかもしれません。

1)アンドロイド取り除く:あなたはこの

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){} 
    }); 
+0

私は試しましたが、ビューの作成後にボタンの 'ImeOptions'を変更することはできません。しかし、何かが入力されるまで入力/検索ボタンを無効にしたいので、とにかく適切なソリューションのようには感じられません。この答えが働くと、「検索」ではなく「入力」ボタンに「完了」というテキストが表示されます。私はボタンをグレー表示にするか、空の文字列を検索できないことをユーザーに示すためのものです。 – Pieter888

0

のような動的な何かキーボードを変更することを可能にするXML

2)カスタムTextWatcher addTextChangedListener(TextWatcherウォッチャーを作成します)からimeOptions = "actionSearchを" あなたカスタム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); 
    } 

あなたはまた、主要検索するには、この操作を行うことができます。

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

enter(66)とsearch(84)の両方のkeyCodeを追加した後でも、それを無視しません。イベントをログに記録した行のコメントを外した後、私はそれが決して 'dispatchKeyEventPreIme'に届かないことがわかりました。コンソールに何も出力されません。 – Pieter888

+0

@ Pieter888 HTCのような検索のハードキーの場合、このメソッドが呼び出す 'dispatchKeyEventPreIme'が表示され、ソフトキーボードの受信イベントの場合は、answerで更新された' mCustomEditText.setOnEditorActionListener'を試すことができます。ソフトキーボードのEnterキー。 – Herry

0

はあなたのActivityOnKeyListenerを実装します。

このkeyListenerをEditTextに追加します。あなたのActivity

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とKeyUpに対して2回呼び出されます。 onKey()メソッドのパラメータとして受け取ったKeyEventインスタンスを使用してフィルタリングする必要があります。

+0

私はこのアプローチをテストしました。 .....それはうまく動作します..... –

0

テキストフィールドにOnEditorActionListenerを添付し、actionIdがIME_ACTION_DONEの場合は、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; 
    } 
    } 
}); 

は、我々はアンドロイドキーボード上のアクションボタンを無効にすることはできません。このLINKLINK

+0

彼はキーボードが隠れるのを防ぐのではなく、アクションボタンを無効にしたいと思います。 – Ronnie

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(); 
関連する問題