僅供個人參考使用,如果你喜歡,你也可以用。保護網絡環境,拒絕噴子。我是無私奉獻的,沒讓噴子拿一分錢,噴子請閉嘴。
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)。