禁用Android中的搜索按钮

时间:2012-03-23 00:06:47

标签: android

我在Android应用中有一个对话框,我不希望用户能够取消。使用.setCancelable(false)禁用后退按钮,但按下搜索按钮仍会取消对话框。我看到this question告诉我应该包括

public boolean onSearchRequested() {
    return false;
}

但我仍然可以使用搜索按钮取消对话框。这是我的代码:

public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        showDialog(0);
    }

    public boolean onSearchRequested() {
        return false;
    }

    protected Dialog onCreateDialog(int id) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Message")
               .setCancelable(false)
               .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // nothing
                   }
               });
         return builder.create();
    }
}

4 个答案:

答案 0 :(得分:4)

@Benh您需要使用此代码为Dialog的Key Listener设置

   builder.setOnKeyListener(keylistener);

在“活动类”中添加以下代码

  OnKeyListener keylistener=new DialogInterface.OnKeyListener() {
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
            return true; //we stop begin cancel of dialog or Progressbar
        }
        return false; 
    }
}; 

在你的对话框中尝试以上内容,希望这对你有用。

答案 1 :(得分:2)

 public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.ACTION_DOWN==KeyEvent.KEYCODE_SEARCH)
        return false;
    else
    return super.onKeyDown(keyCode, event);
}

答案 2 :(得分:2)

我通过覆盖进度对话框来禁用搜索按钮。我在onSearchRequest()上创建了未命名的类和覆盖方法。这对我有用。 我用这个:

progressDialog = new ProgressDialog(Activity.this){

                @Override
                public boolean onSearchRequested() {
                    return true;
                }           


            };

而不是代码:

progressDialog = new ProgressDialog(Activity.this);

答案 3 :(得分:1)

您只需要按下搜索按钮,并在按下时不执行任何操作。

public boolean onKeyDown(int keycode, KeyEvent e) {
            switch(keycode) {
                case KeyEvent.KEYCODE_SEARCH:
                    return true;
                    break;
            }

            return super.onKeyDown(keycode, e);
        }

如果这对您的Activity类不起作用,那么您可能需要创建Dialog的子类并为对话框类实现onKeyDown方法。