AlertDialog.Builder(this) .setTitle("Title") .setMessage("Message") .create() .show() 안드로이드에서 제공하는 기본 다이얼로그를 사용하려면 위와 비슷하게 작성하면 된다. 하지만 다이얼로그의 ui를 변경하거나 특정 로직을 더 넣고 싶다면 커스텀 다이얼로그를 구현해야 한다. 커스텀 다이얼로그를 구현하는 방법은 크게 두 가지가 있다. FragmentDialog를 확장하는 방법과, manifest의 theme를 dialog로 변경하는 방법이다. FragmentDialog를 상속받아 구현하는 방법이다. FragmentDialog도 Fragment의 일종이므로 Fragment의 생명주기를 활용할 수 있다. Dialo..
데이터 바인딩 뷰 바인딩과 동일하게 findViewById() 호출을 대체할 수 있도록 안드로이드가 지원하는 라이브러리다. 뷰 바인딩과 다른 점은, 액티비티의 데이터와 레이아웃(xml)의 뷰가 바인딩 될 수 있다는 것이다. 즉, 액티비티의 데이터가 변경되면 ui상의 뷰가 자동으로 변경되는 기능을 제공한다. 이를 액티비티 코드 내에서 구현하는 것이 아닌, xml 코드 내에서 구현할 수 있어 코드량이 줄어든다. (declarative 레이아웃 작성) 또한 xml 파일만 보고도 View에 어떤 데이터가 들어가는지 파악할 수 있기 때문에 가독성이 좋아진다. 1. build.gradle (module) android { dataBinding { enabled = true } } module/app 수준의 빌드 파..
RecyclerView ListView와 동일하게 데이터 세트를 개별 아이템으로 구성하여 화면에 출력하는 ViewGroup 중 하나다. 여러 데이터를 스크롤할 수 있게 화면에 표시하는 위젯이다. ListView와 다른점 ListView는 리스트가 갱신될 때마다 아이템 뷰를 새로 구성해야 한다는 단점이 있다. 반면에 RecyclerView는 이름에서 알 수 있듯이 개별 아이템을 재활용한다. 항목이 스크롤되어 화면에서 벗어나더라도 개별 뷰들을 제거하지 않고, 스크롤된 새로운 아이템의 뷰를 재사용하기 때문에 성능이 개선된다. 필요한 클래스 1. RecyclerView 데이터 세트를 화면에 출력하는 ViewGroup 2. ViewHolder 리스트의 개별 아이템은 ViewHolder 객체로 정의된다. Recyc..
다이얼로그를 커스텀해서 사용하면, match_parent를 해도 화면에 꽉 차지 않는 경우가 있다. 커스텀 다이얼로그의 기본 width, height 값이 0이기 때문이다. 이 경우 setContentview() 호출 후에 아래의 코드를 호출하면 해결된다. dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) 다이얼로그의 전체 크기를 ViewGroup.LayoutParams.MATCH_PARENT로 바꾸어주는 코드다.
코틀린으로 안드로이드 프로젝트를 구현하던 도중 아래와 같은 오류가 발생했다. 나같은 경우에는 ViewModel.Factory 인터페이스를 구현한 부분에서 생긴 오류였다. Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option android { kotlinOptions { freeCompilerArgs = ['-Xjvm-default=compatibility'] } } 모듈 build.gradle의 android-kotlinOptions 안에 freeCompilerArgs 한줄을 넣어주면 해결된다! 서치해봐도 잘 나오질 않아서 멘탈 터질뻔 했다.. 참고 https://stackoverf..
뷰 바인딩 xml에 있는 뷰들을 코드 상에서 바로 가져올 수 있는 기능이다. 코드가 지저분해질 수 있는 큰 원인인 findViewById()를 제거할 수 있다. 또한 findViewById()를 사용하면 관리해야 할 변수가 많아지고, 다른 액티비티의 xml을 가져오면 null값이 대입되어 NullPointerException이 발생할 위험이 있다. 뷰 바인딩을 사용하면 이러한 단점이 해결된다! 변수를 생성할 필요없이 xml의 id를 바로 사용할 수 있기 때문이다. 또한 다른 액티비티의 xml을 가져오면 컴파일 에러가 나기 때문에 비교적 안전하다. 그럼 뷰 바인딩을 적용하는 방법을 알아보자. 1. build.gradle (Module) android { ... viewBinding { enabled = t..
1. 기존에 있던 툴바를 사용하지 않기. 경로 -> /res/values/themes/themes.xml 2. res/menu/menu_toolbar.xml res 폴더 안에 menu 폴더 생성 후 menu_toolbar.xml 생성. (폴더명, 파일명 무관) 안에 자신이 툴바 안에 생성하고 싶은 항목들을 추가한다. id -> 다른 곳에서 항목을 참조할 때, 항목을 구분할 수 있는 아이디 (항목 이름) title -> 항목의 제목 icon -> 항목 아이콘. drawable 폴더 안에 아이콘을 넣어서 참조한다. app:showAsAction="always" : 항상 보이게 표시 app:showAsAction="ifRoom" : 액션바에 공간이 있을 경우에만 표시 3. toolbar layout 생성 (l..
https://school.programmers.co.kr/learn/courses/30/lessons/84021 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 프로그래머스 코딩테스트 고득점 Kit의 DFS/BFS 문제다. 코드도 길고 구현이 빡셌지만 아이디어를 생각해내기까지 어렵지는 않았다. for (int i=0;i