首先,我对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中设置可触摸模式的可聚焦和可聚焦, 上面的代码
答案 0 :(得分:7)
使用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()
检查使这个特定于点击两次问题;如果控件已经有焦点,那么您的实际点击应该会显示列表而无需额外的工作。
答案 1 :(得分:0)
试试这个
spinner.requestFocusFromTouch();