전체 글

개발기록 / 공부한 내용을 정리하는 블로그
· Kotlin/Util
개발을 할 때 지정해준 시간 이후 지정하는 동작을 수행하는 Util이 필요한데 따로 저장해두면 편할 거 같아 블로그에 남긴다. abstract class TimerUtil { private var mDelayTime = 1000L // default ms private var mName = "none" var isStart = false companion object { private const val WHAT = 100 } constructor(){} constructor(name: String) { mName = name } constructor(name: String, milisecond: Long) { mName = name mDelayTime = milisecond } abstract fun o..
· Android/Util
프로젝트 진행 중 서버에서 \n(줄 바꿈) 문자를 주지않고 변하는 Text 값에 따라 해당 단어가 TextView영역을 넘기면 줄바꿈을 하고 gravity의 Left를 준 것처럼 보이게 해야했다. 단순하게 gravity의 Left를 주고 해당 Text가 처리하였었지만 길이가 애매한 Text 들이 들어왔을때 Text가 잘린다고 이슈가 들어와서 ViewTreeObserver의 GlobalLayoutListener를 이용해 Layout의 크기를 재조정하는 코드를 사용하였다. testTextBox // 텍스트뷰가 들어있는 layout testText //텍스트뷰 testTextBox.visibility = View.Invisible testText.viewTreeObserver.addOnGlobalLayoutL..
특정 팝업이나 공지사항 알림 등 앱을 개발할 때 여러 목적으로 항목을 표시하는 인디케이터를 사용할 때가 많다. 실습으로는 코드상에서 ImageView를 생성하여 추가한 후 LinearLayout에 추가하여 목적에 따라 구현하였다. 사용된 이미지와 인디케이터 drawable과 selector, dimen xml Fragment, Dialog에 적용할 때도 많으나 실습으로는 Activity에서 진행하였다. class IndicatorActivity : AppCompatActivity() { lateinit var indicatorContainer: LinearLayout //인디케이터를 표시할 LinearLayout lateinit var contentsContainer: LinearLayout //내용을 ..
RecyclerView를 사용하는 가장 기본적인 구성은 옆과 같이 가로나 세로로 1열로 정렬하는 형태일 것이다. (LinearLayoutManager) 구현 의도에 따라 필요에 따라 열(Row)마다 차지하는 Column 갯수가 다르게 해야 하는 경우가 있다. 이처럼 차지하는 Column 갯수가 다르게 하고 싶을때 GridLayoutManager의 SpanSizeLookup함수를 사용한다 아래코드는 화면 값을 구해 특정 영역을 뺀 값을 계산 후 Adapter 내에서 data를 통해 position 값으로 return 하는 값을 분기하여 받아 온 후 spansize를 구해 지정해 주는 코드 val currentWidth = getDeviceWidth(context) - (mActivity.resources...
· Android/Util
무엇인가 로딩을 할때 띄워줄 로딩 프로그레스이다. Animation을 사용해 Image를 Rotate 한다. class ContentsLoadingProgress { companion object { const val LOADING_SCREEN_TAG = "contents_loading_screen" val mContentViewHashMap: HashMap = HashMap() @JvmStatic @JvmOverloads /** * @param touchable = 콘텐츠 로딩화면 뒤에 터치되지 않게 설정 */ fun showProgress(key: String, activity: Activity, touchable: Boolean = false) { if(mContentViewHashMap.conta..
현재 날짜 시스템 currentTimeMillis로 현재 날짜와 시간을 구하고 Date로 만듬 val date = Date(System.currentTimeMillis()) DateFormat으로 년도 월 일 시 분 초로 원하는 형식(중간에 기호 등)으로 출력 가능 ("yyyy/MM/dd HH:mm:ss") 시간을 표시할 때 HH 면 24시 기준 hh면 12 기준이다 val sdfCurrent = SimpleDateFormat("yyyyMMddHHmm") String으로 변환 val formatDate: String = sdfCurrent.format(date) 사용 취지에 맞게 long이나 int로 변환하여 사용 (년도에서 분까지 쓰게되면 long 추천 - 자료값 범위 때문 val currentDate..
android:backgroundTint : 버튼 색을 변경 android:src : 버튼 안에 아이콘 넣을 때 사용 app:pressedTranslationZ: 버튼 클릭 시 그림자 범위 app:elevation : 액티비티 바닥부터 버튼까지의 높이 visibility 속성을 사용해 특정 플로팅 액션 버튼을 눌렀을 때 가시성을 켜주거나 애니메이션을 주어 나타내는 효과를 줄 수 있다. 실습해본 애니메이션으로는 메인 버튼을 눌렀을 때 다른 버튼이 올라가고 내려가는 애니메이션을 사용하였다. 올라가는 animation 내려가는 animation 이러한 애니메이션을 사용해 플로팅 버튼을 클릭해 프래그먼트를 변경하는 실습을 해보았다. class FloatingBtnActivity : AppCompatActivit..
RecyclerView 사용시 수정된 데이터를 다시 뿌려주기 위해서 notifyDataSetChanged()를 사용해 화면을 다시 갱신을 시킬 경우가 많다. 화면을 갱신시키는데 깜빡임 현상 때문에 고정되어있는 데이터들도 깜빡거려 안 좋게 보일 수가 있다. Kotlin val animator = recyclerHome?.itemAnimator //리사이클러뷰 애니메이터 get if (animator is SimpleItemAnimator){ //아이템 애니메이커 기본 하위클래스 animator.supportsChangeAnimaions = false //애니메이션 값 false (리사이클러뷰가 화면을 다시 갱신 했을때 뷰들의 깜빡임 방지) } Java RecyclerView.ItemAnimator anim..
리사이클러뷰의 맨 첫 번째 또는 마지막 요소에서 스크롤(오버스크롤)할 경우 엣지 스크롤 이펙트가 적용되어 있다. 요구사항으로 인해 이펙트를 숨겨야 하는 상황이 있을수도 있다. 검색해보면, 대부분 리사이클러뷰에 android:overScrollMode="never" 속성을 적용하면 해결할 수 있다고 나와있다. 실제로 이 속성만 추가해주면 해당 이펙트는 사라진다. 하지만 오버스크롤 모드가 비활성화 되기 때문에, 오버스크롤이 필요한 경우에는 적용하기에 부적절한 방법이다. 그래서 오버스크롤 모드가 필요한 경우에 아래와 같은 방법으로 해주면 된다. (주의 - 다른 사이드이펙트가 발생할 수 있음) Kotlin recyclerView.edgeEffectFactory = object : RecyclerView.Edge..
bumjae
Android Technote