Android

안드로이드/이론

[ 안드로이드 ] 액티비티 배경 투명하게 설정 (+ 투명 배경 유지 안되는 이슈 해결)

테마 설정 아래와 같이 values/themes.xml (or styles.xml) 내에 style을 선언합니다. 주의점 위와 같이 액티비티 배경을 투명하게 설정해도 투명해지지 않는 이슈를 발견 정확하게는 액티비티가 투명해졌다가 전환 애니메이션이 끝나면 다시 불투명하게 돌아오게되는 현상 앱의 데이터를 지우니 다시 투명하게 유지가 되었고, 액티비티를 몇 번 반복하여 호출하다보니 다시 재현 됨 컬러나 설정 등이 캐싱되고 있는 것 같아 아래와 같이 선언해주니 해결 됨 @null

안드로이드/이론

[ 안드로이드 ] View에 블러처리 하기 - BlurView 라이브러리

앱 개발을 하다보면 디자인 상으로 블러 처리를 해주어야 할 때가 많은데, 이미지에 블러 처리를 해주는게 아닌 View 자체에 블러 처리가 되는 것을 원했다. 위와 같은 화면을 만들기 위해 해당 라이브러리를 이용했는데, 꽤 괜찮았었고 사용시 주의점 등을 기록하기 위해 해당 글을 작성했다. GitHub - Dimezis/BlurView: Dynamic iOS-like blur of underlying Views for Android Dynamic iOS-like blur of underlying Views for Android - GitHub - Dimezis/BlurView: Dynamic iOS-like blur of underlying Views for Android github.com 라이브러리 적용..

안드로이드/이론

[ 안드로이드 ] Fragment에서 onBackPressed(뒤로가기 이벤트) 처리하기

Fragment 위에 또 다른 화면을 띄워야 했다. 새로 띄울 화면은 배경이 반투명으로, 기존의 화면이 비쳐 보여야했기 때문에 새로운 Fragment를 띄우는 것이 아닌 View로 덮어 씌우는 방식을 선택 했다. 이런 식으로 구현하니 뒤로가기 처리가 문제가 되었는데, onBackPressedDispatcher를 이용해서 간단히 해결할 수 있었다. onBackPressedCallback 정의 private val onBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { // 특정 뷰가 보일 떈 직접처리 if(bind.clSelectAssessment.isVisible){ hideSele..

안드로이드/이론

[ 안드로이드 ] RecyclerView - StaggeredLayoutManager 아이템 위치에 따라 여백 설정하기

RecyclerView StaggeredLayoutManager RecyclerView의 LayoutManager를 StaggeredLayoutManager로 아래 사진과 같은 레이아웃이 그려진다. 사진과 같이 Height에 따라 빈 공간을 채우게 되는데, 주의할 점은 인덱스가 채워지는 순서로 매겨진다는 것이다. 일반적인 Grid 레이아웃의 인덱스와는 다른 형태인 것을 볼 수 있다. ItemDecorator를 이용하여 RecyclerView 아이템에 여백을 설정할 때, 인덱스로 위치를 구분하곤 하는데, StaggeredLayoutManager에선 인덱스로 위치를 구분하긴 힘들기 때문에 조금 다른 방법을 사용해야한다. 아이템 위치 구분하기 위의 사진과 같이 아이템 끼리의 간격을 동일하게 지정해주려면, 각 ..

안드로이드/이론

[ 안드로이드 ] WebView 동영상 전체화면 처리 ( + 상단바 숨기기)

WebView 동영상 전체화면 안드로이드의 WebView에선 기본적으로 동영상 전체화면 처리를 해주지 않는다. 따라서, 별도로 커스텀을 해야하며 전체화면 버튼 클릭 시 새로운 화면을 위에 덮어 씌운다고 생각하면 된다. WebChromeClient 클래스를 상속 받아서 커스텀해야하고, onShowCustomView, onHideCustomView 메소드를 통해 전체화면 처리를 할 수 있다. FullScreenHolder 생성 동영상이 올라갈 배경을 지정한다. 이 클래스를 지정하지 않으면 동영상을 제외한 여백 부분이 투명하게 처리된다. private class FullScreenHolder(context:Context): FrameLayout(context) { init { setBackgroundColor..

안드로이드/이론

[ 안드로이드 ] ViewPager2 안에 WebView 중첩 Swipe 처리

상황 ViewPager2 내에 WebView를 넣었을 때, WebView 안에 배너와 같은 horizonScroll이 가능한 View가 있으면 충돌이 일어난다. 처리 방법 WebView의 Down 터치 이벤트 감지 시 ViewPager의 Swipe 기능 Off WebView의 Up 터치 이벤트 감지 시 ViewPager의 Swipe 기능 On WebView 내에서 OverScroll 감지 시 ViewPager Swipe 기능 On → WebView에서 Down 터치 이벤트가 감지되는 순간 ViewPager에 사용자 액션을 차단하여 터치 이벤트를 WebView 내의 배너(기타 스크롤이 가능한 뷰들)가 가져가도록 하는 것 코드 CustomWebView.kt class CustomWebView : WebVie..

안드로이드/이론

[ 안드로이드 ] WebView 페이지 탐색 처리

Android의 WebView에서 링크를 클릭하면 URL을 처리하는 앱이 실행되는 것이 기본적인 동작이지만, 해당 링크가 WebView 내에서 열리도록 동작을 재정의할 수 있다. 이렇게 하면, WebView 내에서 웹페이지 방문 기록을 통해 사용자가 앞뒤로 페이지 탐색이 가능해진다. Url 실행 처리 1. WebViewClient 연결 사용자가 클릭한 링크를 WebView에서 열려면, setWebViewClient()를 통해 WebView에게 WebViewClient를 제공해야 함 val myWebView: WebView = findViewById(R.id.webview) myWebView.webViewClient = WebViewClient() 이렇게만 해주면 사용자가 클릭한 모든 링크가 WebView..

안드로이드/이론

[ 안드로이드 ] WebView 기본 사용법

WebView 사용법 1. 권한 요청 WebView를 사용하기 위해선 인터넷 권한이 필요 ... 2. 앱에 WebView 추가 xml에서 추가 Activity에서 추가 val myWebView: WebView = findViewById(R.id.webview) myWebView.loadUrl("http://www.example.com") 3. 웹 페이지 로드 loadUrl() url로 로드 val myWebView:WebView = findViewById(R.id.webview) myWebView.loadUrl("http://www.example.com") 로컬에서 로드 val myWebView:WebView = findViewById(R.id.webview) webView.loadUrl("file://..

dongx._.2
'Android' 태그의 글 목록