当Scinner Spinner被选中时,Android Scrollview更改位置(向下滚动)

时间:2016-04-10 13:09:27

标签: android scroll android-spinner

当我将微调器放入ScrollView时我遇到了问题

用户选择ScrollView项目后,ScrollView向下滚动

选择Spinner项目:

spn_cat_one.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int innerPosition, long l) {
            // ...
            spn_cat_one.clearFocus();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            // Do Nothing
        }
    });

ScrollView OnTouchListener:

    scr_purchase_holder.requestFocusFromTouch();
        scr_purchase_holder.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(spn_cat_one.hasFocus()){
                spn_cat_one.clearFocus();
            }
            scr_purchase_holder.requestFocusFromTouch();
            return false;
        }
    });

在xml中,ScrollView具有属性:

    android:descendantFocusability="afterDescendants"

1 个答案:

答案 0 :(得分:1)

我尝试了几乎所有参数组合(android:focusable, android:focusableInTouchMode, android:descendantFocusability ...),但它们都没有为我工作。

焦点位于EditText后,视图将在微调器选择更改后滚动到该视图。 我的解决方案是实现我的微调器的OnTouchListener以明确关注EditText,这里是:

将您的侦听器声明为字段。

private View.OnTouchListener spinnerTouchListener;

在将侦听器设置为微调器之前实例化它。

private void initListeners() {
//region spinnerTouchListener
    spinnerTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP){
                View focused = getView().findFocus();
                if (focused instanceof EditText){
                    focused.clearFocus();
                }
            }
            return false;
        }
    };
    //endregion
}

并将其设置为每个微调器。

private void initSpinner() {
    mySpinner.setOnTouchListener(spinnerTouchListener)
    otherSpinner.setOnTouchListener(spinnerTouchListener)
}

它对我有用。

享受