NestedScrollView嵌套EditText,EditText文本很多時,無法上下滑動:
方法一:
edittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction()==MotionEvent.ACTION_DOWN){
//通知父控件不要干擾
view.getParent().requestDisallowInterceptTouchEvent(true);
}
if(motionEvent.getAction()==MotionEvent.ACTION_MOVE){
//通知父控件不要干擾
view.getParent().requestDisallowInterceptTouchEvent(true);
}
if(motionEvent.getAction()==MotionEvent.ACTION_UP){
view.getParent().requestDisallowInterceptTouchEvent(false);
}
return false;
}
});
缺點:只能觸摸EditText外部來滑動;
方法二:
// NestedScrollView嵌套EditText,導致EditText滑動衝突
mBinding.etCheckDesc.setOnTouchListener((view, motionEvent) -> {
if (view.getId() == R.id.et_check_desc && UiUtil.canVerticalScroll(mBinding.etCheckDesc)) {
//通知父控件不要干擾
view.getParent().requestDisallowInterceptTouchEvent(true);
}
if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
view.getParent().requestDisallowInterceptTouchEvent(false);
}
return false;
});
/**
* EditText豎直方向是否可以滾動
* <p>
* https://www.jb51.net/article/86932.htm
*
* @param editText 需要判斷的EditText
* @return true:可以滾動 false:不可以滾動
*/
public static boolean canVerticalScroll(EditText editText) {
//滾動的距離
int scrollY = editText.getScrollY();
//控件內容的總高度
int scrollRange = editText.getLayout().getHeight();
//控件實際顯示的高度
int scrollExtent = editText.getHeight() - editText.getCompoundPaddingTop() - editText.getCompoundPaddingBottom();
//控件內容總高度與實際顯示高度的差值
int scrollDifference = scrollRange - scrollExtent;
if (scrollDifference == 0) {
return false;
}
return (scrollY > 0) || (scrollY < scrollDifference - 1);
}
方法三:自定義EditText控件:
參考:https://www.jianshu.com/p/b352fdee325d