【问题标题】:Best way to grab focus for Android Spinner为 Android Spinner 获取焦点的最佳方式
【发布时间】:2013-12-26 18:28:48
【问题描述】:

首先,我对 Android 有点陌生,话虽如此。所以我有一个微调器,每次我做出选择时,手机都会向上滚动到最后一个有焦点的编辑文本。这很烦人,所以我将微调器设置为可聚焦,但由于某种原因,我必须单击微调器两次才能将其打开(第一次单击使微调器获得焦点,第二次单击打开微调器)。所以到目前为止我想出的最好的是:

activitySpinner = (Spinner) findViewById(R.id.acivity_dropdown);
    activitySpinner.setFocusable(true);
    activitySpinner.setFocusableInTouchMode(true);
    activitySpinner.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            activitySpinner.requestFocus();
            activitySpinner.performClick();
            return true;
        }
    });     

这需要两次点击,但这会导致问题,因为它会在最轻微的触摸时打开微调器,即使我想要做的只是向下滚动。我是否以错误的方式看待这个问题?有没有办法让微调器聚焦并允许它在第一次点击时打开?

我尝试过的事情: 在xml中设置焦点, 在java中的触摸模式下设置可聚焦和可聚焦, 上面的代码

【问题讨论】:

    标签: java android android-spinner


    【解决方案1】:

    使用setFocusable(true)setFocusableInTouchMode(true) 是正确的。要解决后者造成的两次触摸问题,请检查触摸处理程序中的 ACTION_UP 事件并返回 false 以让事件冒泡,从而消除额外的 requestFocus() 调用:

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP && !v.hasFocus()) {
            v.performClick();
        }
        return false;
    }
    

    hasFocus() 检查使这特定于单击两次问题;如果控件已经获得焦点,则您的实际点击应该会调出列表而无需额外工作。

    【讨论】:

      【解决方案2】:

      也试试这个

                spinner.requestFocusFromTouch();
      

      【讨论】:

      • 我目前可以获得焦点,我只是在获得焦点时遇到了问题,而无需单击微调器两次。是否有一个听众可以让我避免遇到我遇到的问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多