Android68 리사이클러뷰 역순으로 출력하기 리사이클러뷰를 사용할 때, 아이템을 역순으로 출력해야 하는 경우가 있습니다. SQL등에서 가져온 아이템을 역순으로 뽑아서 출력하는 방법도 있지만 Layoutmanager를 이용하면 아주 간단하게 역순으로 출력할 수 있습니다. LinearLayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); mLayoutManager.setReverseLayout(true); mLayoutManager.setStackFromEnd(true); recyclerView.setLayoutManager(mLayoutManager); 2020. 1. 29. 화면크기에 따라 일정한 비율로 크기가 자동조절되는 TextView 모바일 기기, 특히 안드로이드 기기들은 다양한 화면크기와 해상도를 가지고 있습니다. 따라서 앱의 UI를 디자인할 때 각 요소들의 사이즈를 주의해서 설정 해 주어야 합니다. 버튼이나 이미지와 같은 UI 오브젝트에 px 이나 inch 값을 주게되면 기기마다 다른 크기로 보이게 되기 때문에 기기에 무관하게 동일한 크기로 보일 수 있도록 dp 값을 사용하는것이 기본이 된지 오래되었습니다. 같은 dp 값을 가지고 있다면 해당 오브젝트는 어떤 기기에서도 거의 동일한 크기로 보이게 되는데 기기의 화면크기가 모두 다르다는데서 또다른 문제가 다시 한번 발생합니다. 예를 들어 가로 900dp 세로300dp의 오브젝트를 배치한다고 가정해 보면, 작은 스크린 사이즈의 기기에서는 해당 오브젝트가 잘리게 되기 때문입니다. 특정한.. 2019. 7. 13. Manifest merger failed : Attribute application@appComponentFactory build.gradle 파일에서 implementation 된 일부 구글 라이브러리들의 버전을 업데이트 해 준 뒤 해당 오류가 발생되며 빌드가 되지 않는 경우가 발생하였습니다. 제 경우에는 Firebase라이브러리 중 일부를 18.0.0으로, Crashlytics 라이브러리를 2.10.1로 업데이트 해준 뒤 발생하였는데요 빌드 시 오류의 내용은 아래와 같습니다. Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-.. 2019. 6. 28. APK 빌드시 Lint found fatal errors while assembling - Android Studio에서 APK 파일을 빌드할 경우 Lint 에러가 발생하는 경우가 있습니다. 보통 에러 발생 메시지는 아래와 같습니다. Lint found fatal errors while assembling a release target. To proceed, either fix the issues identified by lint, or modify your build script as follows: android { lintOptions { checkReleaseBuilds false // Or, if you prefer, you can continue to check for errors in release builds, // but continue the build even when er.. 2019. 6. 19. Uri 로부터 파일의 실제경로 구하기/외장SD카드의 경로 얻기 안드로이드 앱을 만들다보면 외부의 다운로드 링크나 인터넷 주소가 아니라 기기 내부의 파일을 uri를 사용하여 이용하는 경우가 있습니다. Content Provider를 이용해서 파일에 접근하는 경우에 uri로 해당 파일을 얻게 되는데 보통 아래와 같이 uri를 얻게 됩니다. content://authority/path/id 문제는, Content Provider에서 정보를 읽어온뒤 사용해버리거나 바로 편집하는 경우에는 상관없으나 이때 얻어진 uri를 가지고 Content Provider를 거치치 않고 직접 접근 하기위한 경로를 얻기위해서 Uri.getpath()를 시도하면 /docume/FILE:1234 와 같은 경로가 반환되게 됩니다. 사진파일이나 음악파일등, 프로바이더로 접근한 뒤에 나중에 실제경로로.. 2019. 4. 3. ad.loadClass에서 발생하는 ClassNotFoundException 앱에서 해당 Exeption을 뿜으며 앱이 종료되는 현상이 갑자기 많이 발생하였습니다. 해당 Crash는 아래와 유사합니다. Fatal Exception: java.lang.NoClassDefFoundError Failed resolution of: Lorg/apache/http/ProtocolVersion; Didn't find class "org.apache.http.ProtocolVersion" on path: DexPathList------ 이용자들은 아마 영문도 모르고 앱이 종료되는 현상을 겪고 있을겁니다. Apache Http 라이브러리가 가 Android 6.0 부터 삭제되었음에도 불구하고, 다른 라이브러리가 이것을 자꾸 요청하기 때문에 발생하는 문제입니다. 제 경우에는 Apache http.. 2019. 4. 3. TextView 에서의 InflateException 발생 이번 업데이트에서 TextView에 fontFamily 속성 부여후 앱 배포를 했는데, android:fontFamily="sans-serif-light" 상기와 같이 xml에 직접적으로 폰트속성을 설정해준 곳에서는 발생하지 않고 android:theme="@style/textTheme" 와 같이 테마로 설정해준 곳에서만 발생하는데, 일부 기기에서 InflateException이 계속 발생하여 원인을 계속 찾았습니다. 그런데 이것이 해당되는 모든 레이아웃에서 발생하는것이 아니고, 일부 특정 레이아웃에서만 계속 발생하였기 때문에 원인이 무엇인지 알 수 가 없었습니다. 찾아보니, 해당이슈는 api 버전 26 이하의 기기에서 간헐적으로 발생하는 OS 자체의 버그이며, 안드로이드 O 버전 에서는 픽스되었다고 합.. 2019. 4. 2. SwipeRefreshLayout 을 사용할 때 가로 스크롤 과 충돌하지 않게하기 WebView와 같은 객체를 사용할때 주로 같이 사용하는 레이아웃이 SwipeRefreshLayout입니다. 모바일 크롬처럼 화면을 아래로 내리면 웹뷰가 새로 로딩되게 해주는 레이아웃 입니다. 이때 문제가 되는 것이, 웹뷰에 로딩중인 사이트에서 가로스크롤이 가능한 요소가 있을 경우에는 해당 요소를 가로 스크롤 할 때 SwipeRefreshLayout이 오작동 하거나 가로 스크롤 요소의 가로 스크롤이 불가능한 경우가 발생합니다. 아래와 같은 CustomSwipeRefreshLayout 을 사용해 주어야 오작동을 방지하고 가로 스크롤 요소와 SwipeRefreshLayout의 기능을 충돌하지 않게 사용할 수 있습니다. 아래와 같은 클래스를 만들어 주고, xml 레이아웃에서 정의 해주면 사용할 수 있습니다. .. 2019. 3. 17. 오늘이 양력/음력 공휴일인지 확인하는 코드 오늘이 공휴일인지 아닌지를 확인하여 특정 작업을 실행시켜 주어야 할 때가 있습니다. 일반적인 공휴일의 경우에는 날짜 리스트를 만들어 두고 오늘의 날짜가 해당 리스트에 있을 경우로 판단해주면 되지만 설날이나 추석 같은 음력 공휴일이 표시된 경우라면 제법 복잡하게 생각해야 되는것 같습니다. 안드로이드 API24 , N (누가) 버전 이상부터 추가된 ChineseCalendar 를 이용하면 간단하게 확인할 수 있습니다. * ChineseCalendar 의 내용과 자세한 사용법은 안드로이드 개발자 문서의 ChineseCalendar항목을 확인 해 주세요. @RequiresApi(api = Build.VERSION_CODES.N) public boolean checkHoliday(Date date) { boole.. 2019. 3. 17. ScrollView 사용시 스크롤 중인지 판단하여 작업 제한하기 스크롤 뷰를 사용할 때 스크롤 상태를 확인해야 할 경우가 있습니다. 스크롤 뷰 내에 클릭 리스너가 있는 객체가 있을 경우 스크롤 할때 해당 객체가 클릭되는 경우가 발생하기 때문입니다. 이때, 스크롤 중인지 아닌지를 확인하여, 스크롤 중이라면 클릭을 제한해야 스크롤 중에 클릭되더라도 객체의 클릭리스너나 터치 리스너가 작동하지 않습니다. 돌아다니는 많은 예제를 보면 CustomScrollView를 만들어 내부에서 OnScrollStoppedListener를 구현하는 방법이나 getViewTreeObserver()를 통해 OnScrollChangedListener를 달아서 내부에서 Y 스크롤의 포지션값 비교를 통한 방법이 있는데 전자의 경우는 사용자가 스크롤뷰에서 fling 제스쳐를 주는 등 예상치 못한 이벤.. 2019. 3. 17. 이전 1 ··· 3 4 5 6 7 다음