728x90

ImageView에 넣을 이미지의 크기를 조절하는 건 scaleType 속성을 설정하면 된다.

 

 

1
2
3
<ImageButton 
    android:scaleType="centerInside"/>
 
cs

 

MATRIX = 원본 크기 그대로 보여줌 (왼쪽상단 정렬) 
CENTER = 원본 크기 그대로 보여줌 (가운데 정렬)
CENTER_CROP = View 영역에 공백이 있으면 채워서 보여줌(비율유지)
CENTER_INSIDE = View 영역을 벗어나면 맞춰서 보여줌(비율유지)
FIT_START = View 영역에 맞게 보여줌 (왼쪽상단 정렬, 비율유지)
FIT_CENTER = View 영역에 맞게 보여줌 (가운데 정렬, 비율유지)
FIT_END = View 영역에 맞게 보여줌 (왼쪽하단 정렬, 비율유지)
FIT_XY = View 영역을 가득 채워서 보여줌(비율유지 안함)

 

 

Reference

https://isntyet.tistory.com/65

 

 

728x90
728x90

 

간단하게 App 내부에 저장한 리소스를 불러와야할 경우, string과 같은 문자열로 컨트롤 하고 싶다면

 

(context.)getResources().getIdentifier(String name, String defType, String defPackage)

 

- 파일명(name): "@drawable/" (생략가능) + 본인이 저장한 파일명 String

- 디렉토리명(defType): "id", "drawable"

- 패키지명(defPackage): (context.)getPackageName(); 

 

 

 

Reference
https://developer.android.com/reference/android/content/res/Resources

https://kheru.tistory.com/54

728x90
728x90

 

메뉴는 한번 만들어놓으면 대체로 초기에 설정하는걸 까먹는데, 이것도 가끔씩 오래간만에 사용하려고 하면 까먹어서 메모.

 

 

- ViewPager 사용시 페이지를 넘기는데, 갑자기 에러가 나타나는 경우는 여러가지 경우의 수가 있다.

  그 중, instantiateItem에서 IndexOutOfBounds exception이 뜰 경우는

  심플하게 생각하면, ViewPager한테 화면을 얼마나 띄워야하는지 미리 안알려줘서 그렇다.

 

 

방안 1. setOffScreePageLimit 메소드 사용

viewpager.setOffscreenPageLimit(페이지수 int값);  

 

limit을 미리 걸어두면, instantiateItem에서 단순하게

(ViewGroup) container.addView(view, position); 으로 사용해도 에러가 나지 않는다.

 

 

 

방안 2. instantiateItem에서 addView할 때 조건 걸기

((ViewPager)container).addView(view, ((ViewPager)container).getChildCount() > position ? position : ((ViewPager)container).getChildCount())

 

ViewPager가 가지고 있는 자녀의 수가 position값보다 큰 지를 판별해서, index가 초과하지 않도록 하는 방법.

 

 

(미리 알 수 있으면) 개인적으로 2번보단 1번이 간결하고 편한 거 같음.

 

 

 

 

Reference

https://stackoverflow.com/questions/9402970/android-viewpager-throwing-indexoutofbounds-exception-when-setting-current-item

728x90
728x90

Android 앱 개발을 하면서 서버와 통신을 위해 네트워크 기능을 쓸 경우가 대다수이다.


기존 네트워크 기능을 위해 HttpURLConnection HttpClient (OS 6.0 부터 삭제) 등이 쓰여왔고, OS 3.0 (API 11) 이후에 NetworkOnMainThreadException 를 피하고자 Thread, AsyncTask 등을 사용하기도 했다.

그 후 여러 편의성을 제공하는 통신 라이브러리 들이 등장하였다. OkHttp, Volley (설명), Retrofit ... (라이브러리 비교) 


출처: http://nobase-dev.tistory.com/6



주요 역사


출처: http://pluu.github.io/blog/android/2016/12/25/android-network/





동기 vs 비동기

 http://jajubogi.tistory.com/14



HttpUrlConnection, Retrofit, OKHttp...?

이런 통신기능을 더쉽게 사용하기위해 여러 종류의 라이브러리들이 존재한다.

대표적으로 Android SDK에서 공식으로 지원했던 HttpUrlConnection (현재는 Deprecated된..) , 구글의 Volley , Square의 OKHttp , Retrofit 등이 있다. 


현재 HttpUrlConnection는 Deprecated되었고, 

그에따라서 HttpUrlConnection를 사용하던 Volley도 내부적으로는 OKHttp를 많이 사용한다.

Retrofit은 Okhttp를 더 쉽게 사용할수있게하는 라이브러리다 .

( OKHTTP의 래퍼클래스라고 생각하면된다. 내부적으로는 OKHTTP를 사용한다. ) 


출처: http://namjackson.tistory.com/26 




HttpUrlConnection

1. 안드로이드 AsyncTask를 이용한 HttpUrlConnection

출처: https://kutar37.tistory.com/101 [저장소]



2. 안드로이드 HTTPURLCONNECTION 한글 전송

출처: https://kutar37.tistory.com/81 [저장소]



OkHttp

될 때까지 안드로이드 #19 [22장 네트워크 통신-1 OkHttp] 

https://www.youtube.com/watch?v=oQKYII__vxc


https://goo.gl/eIXu9l

위의 Json형태의 데이터를 OkHttp를 이용해서 처리하는 방법



될 때까지 안드로이드 #20 [22장 네트워크 통신-2 Gson]

https://www.youtube.com/watch?v=wo2HWBHwMj0



HttpUrlConnection 은 Java 에 포함된 라이브러리이고 OkHttp 는 Square 사에서 만든 Http Client 입니다.
오픈소스이니 OkHttp github(https://github.com/square/okhttp) 에 가시면 소스를 보실 수 있습니다.
내부적으로 HttpUrlConnection 하고 소켓 통신을 사용하는 것 같은데 자세히 안 봐서 잘 모르겠네요.

Retrofit 은 Http 통신을 조금 더 편하게 구현하기 위해 만들어진 라이브러리 입니다.

v1 에서는 안드로이드 버전에 따라 Apache HttpClient 와 HttpUrlConnection 선택해서 사용하거나 별도의 Http Client 를 지정할 수 있었는데 v2 에서는 OkHttp 를 사용하는 것으로 알고 있습니다.


 

출처: https://okky.kr/article/386639









Reference

http://nobase-dev.tistory.com/6

http://pluu.github.io/blog/android/2016/12/25/android-network/

http://jajubogi.tistory.com/14

https://www.youtube.com/watch?v=oQKYII__vxc




728x90

+ Recent posts