当我将微调器放入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"
答案 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)
}
它对我有用。
享受