[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
}
}
소스 를 보면 overScrollByWebView
를 onTouchEvent
호출 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>
이게 도움이 되길 바란다 😉