获取Android Spinner焦点的最佳方式

时间:2013-12-26 18:28:49

标签: java android android-spinner

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

2 个答案:

答案 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();