Java Android Spinner抓住焦点的最佳方式
首先,我对安卓系统还不太熟悉,尽管如此。所以我有一个微调器,每次我做出选择时,手机都会向上滚动到最后一个有焦点的编辑文本。这非常烦人,因此我将微调器设置为可聚焦,但出于某种原因,我必须单击微调器两次才能将其打开(第一次单击会使微调器聚焦,第二次单击会打开微调器)。因此,到目前为止,我得出的最好结论是:Java Android Spinner抓住焦点的最佳方式,java,android,android-spinner,Java,Android,Android Spinner,首先,我对安卓系统还不太熟悉,尽管如此。所以我有一个微调器,每次我做出选择时,手机都会向上滚动到最后一个有焦点的编辑文本。这非常烦人,因此我将微调器设置为可聚焦,但出于某种原因,我必须单击微调器两次才能将其打开(第一次单击会使微调器聚焦,第二次单击会打开微调器)。因此,到目前为止,我得出的最好结论是: activitySpinner = (Spinner) findViewById(R.id.acivity_dropdown); activitySpinner.setFocusable(
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中设置触摸模式下的可聚焦和可聚焦,
上面的代码也可以试试
spinner.requestFocusFromTouch();
使用setFocusable(true)
和setFocusableInTouchMode(true)
是正确的。要解决后一种方法造成的双触问题,请检查触摸处理程序中的操作_UP
事件,并返回false
,让事件冒泡,从而消除额外的requestFocus()
调用:
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP && !v.hasFocus()) {
v.performClick();
}
return false;
}
hasFocus();如果控件已经有焦点,您实际的点击应该会显示列表,而无需进行额外的工作。我当前可以获得焦点,我只是在不必单击微调器两次即可获得焦点时遇到了问题。有没有一个倾听者,我可以把它放进去,阻止我的问题?