WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true); // 자바스크립트 사용여부
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // 자바스크립트가 창을 자동으로 열 수 있게할지 여부
webView.getSettings().setLoadsImagesAutomatically(true); // 이미지 자동 로드
webView.getSettings().setUseWideViewPort(true); // wide viewport 설정
// 설정값이 false인 경우, layout 너비는 디바이스 픽셀에 맞추어 설정된다.
// 값이 true이고 페이지에 뷰포트 메타 태그가 있으면 태그에 지정된 너비 값이 사용된다.
// 페이지에 태그가 없거나 너비가 없는 경우 넓은 뷰포트가 사용된다.
webView.getSettings().setLoadWithOverviewMode(true); //컨텐츠가 웹뷰보다 클때 스크린크기에 맞추기
webView.getSettings().setSupportZoom(false); // 줌설정
webView.getSettings().setBuiltInZoomControls(true); // 줌아이콘
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); // 캐시설정
// LOAD_CACHE_ELSE_NETWORK : 캐시 기간만료 시 네트워크 접속
// LOAD_CACHE_ONLY : 캐시만 불러옴 (네트워크 사용 X)
// LOAD_DEFAULT : 기본 모드, 캐시 사용, 기간 만료 시 네트워크 사용
// LOAD_NO_CACHE : 캐시모드 사용안함
// LOAD_NORMAL : 기본모드 캐시 사용 @Deprecated
webView.getSettings().setAppCacheEnabled(false); //앱내부의 캐시 사용 여부
webView.getSettings().setDomStorageEnabled(true); // 로컬 스토리지 사용여부
webView.getSettings().setAllowFileAccess(true); // 파일 액세스 허용 여부
webView.getSettings().setUserAgentString("app"); // 사용자 문자열 설정
webView.getSettings().setDefaultTextEncodingName("UTF-8"); // 인코딩 설정
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setBlockNetworkImage(false); // 네트워크를 통해 이미지리소스 받을지 여부
webView.getSettings().setSupportMultipleWindows(true); // 멀티윈도우를 지원할지 여부
// {@link WebChromeClient#onCreateWindow} must be implemented by the host application. -
webView.getSettings().setDatabaseEnabled(false); //database storage API 사용 여부
webView.getSettings().setAllowContentAccess(true); // 웹뷰를 통해 Content URL 에 접근할지 여부
// a class -> 내부에 @JavascriptInterface 메서드 구현
// webView.addJavascriptInterface(new a(this), "app");
webView.setWebChromeClient(new WebChromeClient());
webView.clearCache(true);
webView.loadUrl("https://kyome.tistory.com/"); //웹뷰 URL로드
class ViewHolder() {
// item을 구성하고 있는 View에 맞게 변수 생성
var textName:TextView? = null
var textOs:TextView? = null
var textColor:TextView? = null
// setter 생성
fun setNoteBook(noteBook: NoteBook){
textName?.text = noteBook.name
textOs?.text = noteBook.os
textColor?.text = noteBook.color
}
}
(2) ViewHolder 사용하기
이렇게 생성된 ViewHolder는
getView 메서드 내에서 사용된다.
이전에 View로 inflate 한 xml을
다시 inflate 하지 않기 위해 getView의 두 번째 매개변수를 활용한다.
두 번째 매개변수 convertView는
이전에 inflate 한 View를 그대로 전달한다.
즉, convertView가 null이라면 최초 생성이라는
말이기 때문에 Inflate를 수행한다.
위에서 만들어 놓은 ViewHolder class를
객체로 생성하고
이 객체에 Inflate 된 View를 매핑한다.
ViewHolder객체를 잘 생성했다면
Inflate 된 View에 tag의 값으로
저장하고 반환한다.
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
// return
val view:View
val getData = dataList[position]
val vh:ViewHolder
if (convertView == null){
// Inflating
view = LayoutInflater.from(parent?.context).inflate(R.layout.item,parent,false)
// 매핑해놓음
vh = ViewHolder()
vh.textName = view.textName
vh.textOs = view.textOs
vh.textColor =view.textColor
// view에 viewholder 저장
view.tag = vh
// 이벤트 생성
view?.setOnClickListener{
Toast.makeText(context,getData.toString(),Toast.LENGTH_SHORT).show()
}
}else {
view = convertView
vh = convertView.tag as ViewHolder
}
//값 매칭
vh.setNoteBook(getData)
return view
}