gpt4 book ai didi

选择 Spinner 时,Android Scrollview 更改位置(向下滚动)

转载 作者:行者123 更新时间:2023-11-30 01:24:56 25 4
gpt4 key购买 nike

当我将微调器放入 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"

最佳答案

我尝试了几乎所有的参数组合(android:focusable, android:focusableInTouchMode, android:descendantFocusability...)但没有一个对我有用。

一旦焦点位于 EditText 上, View 将在微调器选择更改后滚动到它。我的解决方案是实现微调器的 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)
}

它对我有用。

享受

关于选择 Spinner 时,Android Scrollview 更改位置(向下滚动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36530191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com