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