首先,我对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中设置可触摸和可聚焦的触摸模式,
上面的代码

最佳答案

使用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()复选框使此特定于“单击两次”问题;如果控件已经有焦点,则实际的点击应该会在不做其他工作的情况下显示列表。

09-10 08:10
查看更多