Programming/Android 썸네일형 리스트형 [Android] 소프트 키보드 레이아웃 문제 때때로 소프트 키보드 위에 레이아웃을 올리고 싶은 경우가 있다. 대부분의 검색결과에서는 menifest 에서 해당 activity에 adjustResize를 걸면 해결된다고 설명하고 있고 실제로 어느 정도는 해결이 된다. 문제는 실제로 그러한 방식을 적용해 보면 EditText 가 아래에 위치한 상황에서 레이아웃에 따라 이러한 형태의 모양을 취하게 되는 경우가 있다는 것이다. 단순히 위의 사진으로는 어느 부분이 문제인지 감이 잘 잡히질 않는다. 그러나 실제의 레이아웃은 이러하다. 소프트 키보드로 가려지기 전 레이아웃을 보면 EditText의 Height가 소프트 키보드에 가려져서 원하는 형태로 보여지지 않았고 또한 아래에 버튼이 존재했음을 볼 수 있다. 버튼과 EditText의 절반 이상이 가려지게 되므.. 더보기 [Android] uri 패스로 내부저장소 절대경로 찾기. public String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final St.. 더보기 [Android Studio 3.0] 더 이상 Typekit 을 쓸 필요가 없다. 안드로이드 Support Library 26, Android Studio 3.0 이 드디어 출시되었다. 조금씩 업데이트를 하길래 조만간 뭔가 또 바뀌겠구나 하던 와중 아니나 다를까 역시나. 2.x -> 3.x로 바뀐 만큼 많은 변화가 이루어 졌는데 겉으로 보이는 UI의 변화는 그렇다 치더라도 내부적으로도 많은 변화가 있었다. 크게는 드디어 안드로이드 스튜디오에서 Kotlin 을 쓸 수 있게 된 것. 자바 8 을 정식 지원하게 된 것. 자체적 font 다운 및 폰트 변경 지원. 등이 있다. 그리고 저 폰트 변화에 따라서 현재 2.x 버전에서 한글 Preview를 위해 기존 안드로이트 font.xml 을 변경했었던 사람이라면 3.0 버전업 이후에 preview가 제대로 실행되지 않는다. 업데이트 전에 해당 .. 더보기 [FragmentTabHost] Fragment + Tab Host를 이용해 탭메뉴 만들어 보기 tab menu를 만드는 방법은 여러가지가 있지만, 각자 특색이 있다.tab host를 쓰는 방법과 tablayout을 쓰는 방법이 있는데, tabhost는 각각의 탭 backgroundColor를 바꿀 수 있는 반면 스크롤이 되지 않고 [ 구현을 더 해야한다]. 반면에 tablayout을 하게되면 스크롤을 자연스럽게 구현해 주는 반면 tab 각각의 색을 변경할 수가 없다. 이 포스팅에선 Fragment + tab host를 이용해 탭메뉴를 구현해 보기로 한다. 일단 이와 같이 xml을 구현한다. public class MainActivity extends FragmentActivity { FragmentTabHost host; @Override protected void onCreate(Bundle s.. 더보기 [Android] Permission 체크 하나의 메소드로 해결해보기 안드로이드 마시멜로우 이후 구글의 퍼미션 정책이 바뀌어 중요 퍼미션을 사용해야 하는 기능마다 그 기능을 사용할 때 퍼미션 권한 획득에 대해 물어보게 되었다. 소스코드가 어려운 것은 아니냐 내용이 적지 않으므로 매 퍼미션 사용시 그 코드를 사용하면 코드의 가독성이 떨어질 뿐더러 중복성이 증가하게 된다. 그렇기 때문에 메소드 하나를 생성해 더욱 편리하게 퍼미션 관리를 하는 방법이 없을까 고민해 보았다. 물론 퍼미션 라이브러리가 존재하나 개인적으로 라이브러리를 상속해 쓰다보면 그 라이브러리와 내가 써야하는 코드의 방법이 중복되어 난관에 부딪힐 확률이 높다고 생각하고, 그에 따라 메소드를 불러오는 형식을 선호하여 이러한 방식을 사용하는 것을 보시는 분은 이해해 주셨으면 한다. 일단 퍼미션 관련 메소드의 기본 형.. 더보기 Service 사용 1. Service Service는 안드로이드 4대 컴포넌트 [Activity, Broadcast receiver, Content provider, Service] 중 하나이다.코드가 동작하는 것은 같지만 사용자가 무언가 조작을 하기 위해서 필요한 것이 아니라, 앱을 종료하더라도 지속해서 돌아가야 하는 [ex. 음악앱, 메신저앱] 등을 만들 때 주로 쓰인다. 안드로이드에서는 Service가 실행되고 있는 상태라면 메모리 부족같은 특수한 경우가 아니라면 service가 돌아가고 있는 process를 없애지 않고 지속적으로 관리한다. 그렇기 때문에 지속적으로 background에서 돌아가야 하는 앱에 적합하다. 2. Type Service에는 두가지 타입이 있다. Start service와 Bind serv.. 더보기 Custom ListView ListView는 안드로이드 앱에서 빠져서는 안되는 기본 중에 기본이라 할만한 컴포넌트다. 아무리 기초적인 앱이라도 ListView 하나쯤은 들어가 있기 마련이다.그러한 ListView를 내가 원하는 방식으로 Customizing 하여 만든 것을 Custom ListView 라고 한다. 안드로이드는 Activity 와 View로 화면 구성이 되어 있다. 혹시나 모르고 있을 사람들을 위해 간략히 설명하자면. Activity 가 View가 존재할 수 있는 영역을 제공한다고 할 수 있고, View는 다른 언어에서 Conponent 라는 이름을 흔히 불리는 체크박스, 버튼, 에디트, 라디오 버튼, 이미지 박스 등등을 가리키는 안드로이드의 용어이다. ListView는 그러한 View들이 모이는 viewGroup .. 더보기 Android permission request 안드로이드 6.0(마시멜로우) 부터는 기존과 다르게 어플에서 사용자에게 필요한 권한을 획득해야 할 때마다 사용자에게 권한을 사용하겠다는 허락을 받아야 한다. 처음 어플을 설치할 때 한번에 나열되었던 때에 비해서 개발자 입장에서 매우 귀찮아 진 것은 사실이지만 무분별한 어플의 권한 획득으로 인한 피해를 막겠다는 의도는 좋아 보인다.아무튼 퍼미션 권한을 획득하지 못하면 해당 기능을 사용할 수 없으니 퍼미션 권한 획득 방법에 대해 알아보자. 현재 이 정책은 마시멜로우 이후 부터 적용되는 것이기 때문에 그 이전에 나온 버전들에 대해서는 권한을 일일히 얻어야 할 필요는 없다. 그렇기 때문에 SDK버전이 마시멜로우 이하. 그러니까 targetSDKversion을 23미만으로 설정하면 기존과 같이 manifest에 .. 더보기 Fragment 6. 실 사용예 예이 문서에서 논의한 모든 것을 한 번에 모아 보기 위해, 다음은 두 개의 프래그먼트를 사용하여 창이 두 개인 레이아웃을 생성하는 액티비티를 예시로 나타낸 것입니다. 아래의 액티비티에 포함된 한 프래그먼트는 셰익스피어 희곡 제목 목록을 표시하고, 또 다른 하나는 목록에서 선택했을 때 해당 희곡의 요약을 표시합니다. 또한 화면 구성을 근거로 프래그먼트를 여러 가지로 구성하여 제공하는 방법도 보여줍니다.참고: 이 액티비티에 대한 완전한 소스 코드는 FragmentLayout.java에 있습니다.주요 액티비티는 onCreate() 중에 일반적인 방식으로 레이아웃을 적용합니다.@Override protected void onCreate(Bundle savedInstanceState) { super.onCreat.. 더보기 Fragment - 5. Fragment 수명 주기 처리+ 프래그먼트 수명 주기 처리그림 3. 액티비티 수명 주기가 프래그먼트 수명 주기에 미치는 영향.프래그먼트의 수명 주기를 관리하는 것은 액티비티의 수명 주기를 관리하는 것과 매우 비슷합니다. 액티비티와 마찬가지로 프래그먼트는 세 가지 상태로 존재할 수 있습니다.재개됨(Resumed)프래그먼트가 실행 중인 액티비티에 표시됩니다.일시정지됨(Paused)또 다른 액티비티가 포그라운드에 있고 포커스를 갖고 있지만, 이 프래그먼트가 있는 액티비티도 여전히 표시됩니다(포그라운드의 액티비티가 부분적으로 투명하거나 전체 화면을 뒤덮지 않습니다).정지됨(Stopped)프래그먼트가 표시되지 않습니다. 호스트 액티비티가 정지되었거나 프래그먼트가 액티비티에서 제거되었지만 백 스택에 추가되었습니다. 정지된 프래그먼트도 여전히 표시.. 더보기 이전 1 2 다음