[android] WebView에서 스크롤을 비활성화 하시겠습니까?

지금까지 저는 iPhone 개발자 일 뿐이었고 지금은 Android에 소용돌이를 주기로 결정했습니다. 내가 안드로이드에서 알아낼 수 없었던 것은 프로그래밍 방식으로 스크롤을 방지하는 방법입니다 WebView.

iPhones와 유사한 onTouchMove이벤트 예방이 좋을 것입니다!



답변

다음은 webview에서 모든 스크롤비활성화하는 코드입니다 .

  // disable scroll on touch
  webview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
      return (event.getAction() == MotionEvent.ACTION_MOVE);
    }
  });

스크롤바를 숨기고 스크롤을 비활성화하지 않으려면 :

WebView.setVerticalScrollBarEnabled(false);
WebView.setHorizontalScrollBarEnabled(false);

또는 단일 열 레이아웃을 사용해 볼 수 있지만 이것은 단순한 페이지에서만 작동하며 가로 스크롤을 비활성화합니다.

   //Only disabled the horizontal scrolling:
   webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

수직 스크롤 스크롤 뷰로 웹뷰래핑 하고 웹뷰에서 모든 스크롤링을 비활성화 할 수도 있습니다 .

<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"    >
  <WebView
    android:id="@+id/mywebview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="none" />
</ScrollView>

그리고 설정

webview.setScrollContainer(false);

webview.setOnTouchListener(...)webview에서 모든 스크롤을 비활성화 하려면 위 의 코드 를 추가하는 것을 잊지 마십시오 . 수직 ScrollView는 WebView의 콘텐츠 스크롤을 허용합니다.


답변

여전히 필요한지 여부는 모르겠지만 해결책은 다음과 같습니다.

appView = (WebView) findViewById(R.id.appView);
appView.setVerticalScrollBarEnabled(false);
appView.setHorizontalScrollBarEnabled(false);


답변

WebView무시 모션 이벤트를 만드는 것은 잘못된 방법입니다. WebView이러한 이벤트에 대해들을 필요가 있다면 어떨까요?

대신 WebView비공개 스크롤 메서드를 하위 클래스로 만들고 재정의하십시오.

public class NoScrollWebView extends WebView {
    ...
    @Override
    public boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY,
                                int scrollRangeX, int scrollRangeY, int maxOverScrollX,
                                int maxOverScrollY, boolean isTouchEvent) {
        return false;
    }

    @Override
    public void scrollTo(int x, int y) {
        // Do nothing
    }

    @Override
    public void computeScroll() {
        // Do nothing
    }
}

소스 를 보면 overScrollByWebViewonTouchEvent호출 doDrag하는 호출을 볼 수 있습니다 .


답변

본문에 여백 세부 정보를 추가하면 콘텐츠가 올바르게 래핑 된 경우 스크롤되지 않습니다.

<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0">

충분히 쉽고 코드 + 버그 오버 헤드가 훨씬 적습니다. 🙂


답변

WebView에 리스너를 설정하십시오.

webView.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return(event.getAction() == MotionEvent.ACTION_MOVE));
            }
        });


답변

아직이 문제가 발생하지 않았기 때문에 시도하지 않았지만 onScroll 함수를 무시할 수 있습니까?

@Override
public void scrollTo(int x, int y){
super.scrollTo(0,y);
}


답변

더럽지 만 구현하기 쉽고 잘 작동하는 솔루션 :

단순히 스크롤 뷰 안에 웹뷰를 넣으십시오. 웹뷰를 가능한 콘텐츠보다 너무 크게 만듭니다 (요구 사항에 따라 하나 또는 두 차원 모두에서). .. 그리고 원하는대로 스크롤 뷰의 스크롤바를 설정합니다.

웹뷰에서 수평 스크롤바를 비활성화하는 예 :

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical"
>
    <WebView
        android:id="@+id/mywebview"
        android:layout_width="1000dip"
        android:layout_height="fill_parent"
    />
</ScrollView>

이게 도움이 되길 바란다 😉