일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 노티피케이션 익스텐션
- swift sms
- FlutterView MethodChannel
- Flutter NativeView
- 앱 백그라운드 푸시 데이터 저장
- native flutter view
- 플러터 뷰 컨트롤러
- 스위프트
- 스위프트 카메라
- 스위프트 푸시
- flutter rotate
- 안드로이드 에러
- silent push
- NotificationService Extension
- 스위프트 웹뷰
- flutter 회전
- 안드로이드 숏컷
- 앱 꺼졌을 때 푸시 데이터 저장
- Swift flutterviewcontroller
- 스위프트 앨범
- swift autolayout
- 스위프트 테이블 뷰 셀
- 안드로이드 앨범
- 푸시 데이터 저장
- Swift flutterview
- 안드로이드 바로가기
- 스위프트 UserDefaults
- swift 문자
- Flutter UIKitView MethodChannel
- 안드로이드 FCM
- Today
- Total
Things take time
[Android] 웹뷰 내 스크롤로 새로고침 하기(화면 상단 스크롤 새로고침) 본문
[새로고침]
안드로이드에서 새로고침을 하는 방법은 간단하다. Webview.reload()이 함수인데, 새로고침을 위해 버튼을 하단에 생성하여 연결하는 경우가 많은데.. 이 경우 말고, 화면을 아래로 드래그했을 때.. 즉 웹뷰 내 스크롤 Y값이 0일 때 이 새로고침을 수행하게 하면 되는 것이다.
[준비]
이 새로고침을 사용하는 가장 기본히 되는 레이아웃이 있다. SwipeRefreshLayout이란 것인데 말 그대로 새로고침을 위한 레이아웃이랄까.
레이아웃 파일에서 웹뷰를 감싸는 뷰로 이 스와이프 리프레쉬 레이아웃을 사용한다.
<android.support.v4.widget.swiperefreshlayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contentSwipeLayout"> <webview android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/contentWebView"
android:layout_weight="1"> </webview> </android.support.v4.widget.SwipeRefreshLayout>
그리고 액티비티 클래스파일에서는
import android.app.DownloadManager; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.ViewTreeObserver; import android.webkit.DownloadListener; import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.Toast; public class ContentActivity extends AppCompatActivity { SwipeRefreshLayout refreshLayout; WebView contentWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_content); refreshLayout = (SwipeRefreshLayout) findViewById(R.id.contentSwipeLayout); contentWebView = (WebView) findViewById(R.id.contentWebView); refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { contentWebView.reload(); } }); refreshLayout.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { if(contentWebView.getScrollY() == 0){ refreshLayout.setEnabled(true); } else { refreshLayout.setEnabled(false); } } }); Intent getIntent = getIntent(); String url = getIntent.getStringExtra("url"); if(url != null){ contentWebView.loadUrl(url); } } }
웹뷰에 대한 세팅이나 설정은 제외했다. 이는 따로 포스팅할 것이고..
어쨌든, 저 SwipeRefreshLayout에 리스너와 함께 스크롤 체인지 이벤트를 걸어준다. 즉, refreshLayout.setEnabled가 true가 되면 onRefresh가 실행되게 되어 웹뷰의 reload()가 실행되는 원리이다.
사용자 입장에서는 버튼을 누르지않아도.. 이 방법이 편해지면 이것만 쓰게 된다.
'Android(기능)' 카테고리의 다른 글
[Android] 뷰페이저를 이용한 앨범에서 여러 사진 불러오기 (7) | 2017.07.20 |
---|---|
[Android] 인텐트 필터, 커스텀 스키마, 그에 따른 액티비티 중복 제거 (0) | 2017.07.12 |
[Android] 하이브리드앱의 기본, 웹뷰 세팅과 자바스크립트 연동 방법 (6) | 2017.07.03 |
[Android] 문자 수신 처리 (브로드캐스트 리시버, BroadcastReceiver) (2) | 2017.07.02 |
[Android] 앱 아이콘에 뱃지(Badge) 표시하기 (4) | 2017.07.01 |