【问题标题】:Disable the search button in Android禁用 Android 中的搜索按钮
【发布时间】:2012-03-23 00:06:47
【问题描述】:

我在 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();
    }
}

【问题讨论】:

标签: android


【解决方案1】:

@Benh 你需要这个代码来设置你的 Key Listener for Dialog

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

在您的对话框中尝试上述操作,希望对您有用。

【讨论】:

    【解决方案2】:
     public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.ACTION_DOWN==KeyEvent.KEYCODE_SEARCH)
            return false;
        else
        return super.onKeyDown(keyCode, event);
    }
    

    【讨论】:

      【解决方案3】:

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

      progressDialog = new ProgressDialog(Activity.this){
      
                      @Override
                      public boolean onSearchRequested() {
                          return true;
                      }           
      
      
                  };
      

      代替代码:

      progressDialog = new ProgressDialog(Activity.this);
      

      【讨论】:

        【解决方案4】:

        您只需要监听搜索按钮的按下情况,当它们被按下时什么也不做。

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

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

        【讨论】:

        • 谢谢,但这对我不起作用。我用这段代码替换了我的代码中的onSearchRequested 函数,除了我删除了break; 语句,因为Eclipse 给了我一个无法访问的代码错误。按搜索按钮仍然可以关闭我的对话框。
        • Hmm.. 好的,那么您可能需要创建 Dialog 的子类并覆盖其 onKeyDown 方法
        猜你喜欢
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        相关资源
        最近更新 更多