fun TabLayout.changeTabsFont(selectPosition: Int) { val vg = this.getChildAt(0) as ViewGroup val tabsCount = vg.childCount for (j in 0 until tabsCount) { val vgTab = vg.getChildAt(j) as ViewGroup vgTab.forEachIndexed { index, _ -> val tabViewChild = vgTab.getChildAt(index) if (tabViewChild is TextView) { tabViewChild.setTextBold(j == selectPosition) } } } } 커스텀 폰트 적용하고 싶을시 fun TextView.setTextBo..
안드로이드 Custom 폰트 변경을 코드로 할경우 아래와 같이 처리하면 된다. 커스텀 폰트를 아래와 같이 적용 했다는 가정 하에 res/font yoonfont.xml extension.kt fun TextView.setTextBold(isBold: Boolean) { this.typeface = ResourcesCompat.getFont(this.context,if(isBold) R.font.yoon770 else R.font.yoon740) } 사용방법 textView.setTextBold(true)
val lat = 35.907757 val lng = 127.766922 val coordinate = LatLng(lat, lng) val makerOptions = MarkerOptions() makerOptions .icon(BitmapDescriptorFactory.fromBitmap(marker)) .position(coordinate) .title(it.name) mMap.addMarker(makerOptions).showInfoWindow() val location = CameraUpdateFactory.newLatLngZoom(coordinate, 17f) mMap.moveCamera(location) mMap.animateCamera(location) 위의 코드로 실행하면 마커 위치와 동..
sudo update-alternatives --config java 을 입력하면 설치된 자바 버전 이 보여지고 사용하고자 하는 번호를 입력하여 변경 가능하다
안드로이드 플레이 스토어에 앱을 등록할 때 직접 만든 jks 파일로 서명 후 앱을 배포하던 방식과 추가로 구글 플레이스토어 자체 인증하여 배포하는 방식이 있다. 문제는 구글 플레이스토어 인증을 통하여 배포를 진행할 시 카카오 API 같이 Hash key 가 필요한 경우 기존 jks 파일로 생성한 Hash 키는 사용이 불가능 하다는 점이다. 따라서 구글 플레이스토어의 앱서명 인증서 정보를 이용해 Hash key 를 가져와야 한다. 방법은 아래와 같다. 플레이 스토어 화면의 내비게이션 메뉴에서 앱 서명을 클릭하자 화면에 앱서명 인증서와 앱 업로드 인증서가 나타날 것이다. 앱 업로드 인증서는 자신이 가지고 있는 비공개 인증서로 앱을 업로드할 때 사용하는 인증서의 값이다. 우리가 사용할 값은 실제 배포에 사용된..
우리가 기본적으로 사용 하는 Tab Layout 을 적용 하면 이런 모습니다. 하단의 Indicator 모양을 아래와 같이 변경 하고 싶으면 어떻게 해야 할까? 방법은 아래와 같다. 1. tab_selector.xml 을 drawable 폴더에 추가 한다. 2. TabLayout 에 아래와 같이 속성을 추가한다. app:tabIndicator="@drawable/tab_selector" 여기가 핵심이다 1. 에서 만들었던 resource 를 적용하는 부분이다. 또한 indicator 높이를 변경하고 싶다면 app:tabIndicatorHeight="10dp" 옵션을 이용해 위치 변경이 가능하다. 참고로 Indicator 모양은 그대로 놔두고 Indicator 의 넓이만 텍스트 크기에 맞게 변경해 주고 싶..
안드로이드 스튜디오가 지원해주는 기능중에 profile or debug apk 라는 기능이 있다. 해당 기능은 상단 탭에 File - profile or debug apk 를 클릭하고 apk 파일을 선택해주면 해당 apk 파일의 내부 파일들을 보여주는데, 소스 코드를 그대로 볼수는 없고 bytecode 로 변환된 파일들을 볼수 있다. 물론 디컴파일 툴을 통해 소스코드를 분석하는게 원본 소스코드에 가깝게 볼수 있지만 간단하게 프로젝트 구조나 기타 리소스들을 보고 싶을때는 조금 유용한 툴이다. (상수는 대체적으로 난독화 할일이 없기때문에 key 값이 그대로 노출 되는 경우가 많다. ) 심심할때 자신이 만든 프로젝트를 디컴파일 툴들을 이용해서 뜯어보자 재미있다.
바로 예시로 넘어가겠습니다. 문제 상황 아래 이미지를 보면 빨간색 여백과 파란색 여백의 길이가 다릅니다. 즉 Recyclerview의 콘텐츠 시작 지점이 다른 건데 이건 제가 예제를 위해 일부러 띄워 놓은 거고, 실제로도 디자이너의 요청에 의해 콘텐츠들 사이의 간격은 유지한 채 위아래 또는 양옆의 시작 지점을 조절해서 보여줘야 하는 경우가 있습니다. 만약 그냥 Recyclerview에 Padding 값을 주면 어떻게 될까요? 밑의 이미지처럼 스크롤을 하면 콘텐츠가 잘리게 됩니다. 그럼 여기서 해결 방법을 찾으라면 많은 방법이 있겠지만, 그중 그냥 대충 생각해서 나온 답이라고 하면, Header를 추가하는 것과 position 이 첫 번째 아이템에만 margin을 준다던지 하는 답이 나올 수 있습니다. 물..
요즘 생산되는 앱들은 다른 사용자와 상호작용을 하는 게 대부분이기 때문에 클라이언트에서 생성된 컨텐츠를 상황에 따라 서버에 저장하고 공유해야 할 상황이 옵니다. 따라서 이번에는 aws S3에 파일을 업로드하는 방법에 대해 알아봅시다. 아래는 해당 과정에 대해 아주 상세하게 잘 정리된 글을 찾아서 링크를 첨부했습니다. 첨부된 링크에서는 Download 부분에 대해 설명이 되어 있기에 추가로 Upload 코드를 추가 했습니다. http://progtrend.blogspot.com/2019/06/android-aws-s3.html Android에서 AWS S3 파일 다운로드하기 Android에서 AWS S3에 있는 파일 다운로드하기 progtrend.blogspot.com 위의 사이트를 글을 통해 Cognit..
Glide.with(applicationContext) .asBitmap().load(url) .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .listener(object : RequestListener { override fun onLoadFailed(e: GlideException?, model: Any?, target: Target?, isFirstResource: Boolean): Boolean { return false } override fun onResourceReady( resource: Bitmap?, model: Any?, target: Target?, dataSource: DataSource?, isFirstRes..