用户选择后,将Spinner焦点设置为Spinner本身

时间:2017-03-14 03:00:08

标签: android android-spinner

当我打开TalkBack时,一旦在我的Spinner中进行选择,焦点会立即返回到屏幕顶部(工具栏)。我想在用户选择后立即关注微调器。

我尝试将微调器设置为可聚焦:

spinner.setFocusable(true); 
spinner.setFocusableInTouchMode(true);

我查看了以下StackOverflow问题和答案,这些问题和答案没有直接解决我的问题:

我注意到在设置选择时会暂时禁用微调器。我猜这就是焦点被委托给不同观点的原因。我怎样才能绕过这种禁用或解决它?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我能够通过执行以下操作解决此问题(希望这有助于其他人遇到同样的问题):

    private boolean isUserSelection; // to detect user selection

    spinner.setChangeListener(this);
    spinner.setFocusable(true);
    spinner.setFocusableInTouchMode(true);
    if (((AccessibilityManager)getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE)).isEnabled())
    {
        spinner.setOnFocusChangeListener(new View.OnFocusChangeListener()
        {
            @Override
            public void onFocusChange(View v, boolean hasFocus)
            {
                if (hasFocus && !isUserSelection)
                    v.performClick(); //bypasses the caret inside the spinner so user doesn't have to tap twice to open the drop down
                else if (!hasFocus && isUserSelection)
                    v.requestFocus();
            }
        });
    }

在微调器的itemSelectedListener中,使用以下代码:

if (isUserSelection && (AccessibilityManager)getActivity().getSystemService(Context.ACCESSIBILITY_SERVICE)).isEnabled()))
    durationSpinner.requestFocusFromTouch();

答案 1 :(得分:0)

重点放在哪里?尝试从那里请求焦点。

newlyFocusedView.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus){
            newlyFocusedView.clearFocus();
            spinner.requestFocus();
            spinner.performClick();
        }
    }
});

同时尝试spinner.setFocusable(true);