僅供個人參考使用,如果你喜歡,你也可以用。保護網絡環境,拒絕噴子。我是無私奉獻的,沒讓噴子拿一分錢,噴子請閉嘴。
0、二話不說,上工具類代碼
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
/**
* 用於解決EditText和ScrollView的觸摸滾動衝突
* Created by LiuChaoya on 2018/1/25 09:46.
* email [email protected]
*/
public class SolveEditTextScrollClash implements View.OnTouchListener {
private EditText editText;
public SolveEditTextScrollClash(EditText editText) {
this.editText = editText;
}
@Override
public boolean onTouch(View view, MotionEvent event) {
//觸摸的是EditText而且當前EditText能夠滾動則將事件交給EditText處理。否則將事件交由其父類處理
if ((view.getId() == editText.getId() && canVerticalScroll(editText))) {
view.getParent().requestDisallowInterceptTouchEvent(true);
if (event.getAction() == MotionEvent.ACTION_UP) {
view.getParent().requestDisallowInterceptTouchEvent(false);
}
}
return false;
}
/**
* EditText豎直方向能否夠滾動
* @param editText 須要推斷的EditText
* @return true:能夠滾動 false:不能夠滾動
*/
private 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);
}
}
1、在需要處理衝突的類中直接調用,舉個栗子
EditText editText = (EditText)findViewById(R.id.editText);
editText.setOnTouchListener(new SolveEditTextScrollClash(editText));
2、結束(代碼很少,不提供下載鏈接,請需要的自行copy)。