본문 바로가기

Android68

CheckBox, switch 등을 ReadOnly처럼 사용하기 CheckBox나 Switch등은 클릭 이벤트가 발생하면 체크가 되거나 스위치가 온오프되는 편리한 기능을 가지고 있습니다. 보통은 아래와 같이 사용합니다. mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mCheckBox.setChecked(isChecked); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { //TODO check true } else { //TODO check false } } }); 별다른 처리를 하지 않더라도 편리하게 사용할 수 있는 이 기능은, .. 2020. 6. 2.
기기의 지역(Locale) 판별 및 리소스 사용하기, 국가코드와 언어코드 1. 개별적인 리소스 사용하기 2. 기기의 지역(Locale) 판별하기 3. 국가코드(contry)와 언어코드(Language) 1. 개별적인 리소스 사용하기 앱을 개발할 때, 사용자의 지역에 따라 다른 언어를 사용해야 하는 경우가 있습니다. 언어의 경우 보통 다음과 같이 개별적인 resource를 만들어 주면 됩니다. 해당 언어를 사용하는 기기에서 해당 resource를 사용하게 되며, 기기의 설정에서 언어변경시에도 자동으로 변경되게 됩니다. 만드는 방법은 아래와 같습니다. 개발중인 안드로이드 앱의 폴더 내의 app/src/main/res 폴더 내에 values를 언어별로 분리해서 추가 해 주면 됩니다. 뒤에 언어가 붙지 않은 폴더가 기본 폴더가 되며, 언어에 따라 해당 언어 코드가 붙은 폴더내의 리소.. 2020. 5. 28.
ScrollView에 잔상이 남는 현상 ScrollView를 커스텀하여 사용하던 중에 발생했습니다. 생명주기가 onStop등으로 가있다가 onResume으로 복원후에 화면이 다시그려진 뒤 스크롤을 할 때 스크롤뷰에 잔상이 같이 스크롤되는 현상이 발생했습니다. 이리저리 찾아보니 정확한 원인이 어떤 것인지는 확인할 수 없었지만 보통 ScrollView를 커스텀 하여 사용할 때 많이 발생하는것 같고 아래와 같은 방법으로 해결하는 방법이 있었습니다. 해당 방법이 적용되는 이유를 보니 스크롤뷰를 스크롤할때 호출되는 Override 함수인 computeScroll을 호출하고 내부에서 requestLayout()을 호출하는 것으로 레아아웃을 다시 그려주기 때문에 해결되는것 같습니다. Java @Override public void computeScroll.. 2020. 5. 4.
java.lang.IllegalStateException: ScrollView can host only one direct child NestedScrollView과 ScrollView를 사용할 때 발생하였습니다. xml레이아웃의 ScrollView안에 여러개의 Layout을 넣어두었을때 발생하였습니다. scrollview.xml 스크롤뷰 내부에는 하나의 차일드 뷰만 들어가야 한다는 내용이며 아래와 같이 해당 xml에서 스크롤뷰 내부의 내용을 scrollview_inner.xml 의 새로운 레이아웃 xml파일로 만든 뒤 include로 넣어준 후에는 정상적으로 동작하였습니다. scrollview.xml scrollview_inner.xml 2020. 5. 3.
NestedScrollView - ScrollView 와 RecyclerView 사용시의 오류 해결 한 뷰에 여러개의 RecyclerView를 사용하는 경우, 아래와 같이 ScrollView 안에 Recyclerview를 넣게 됩니다 이때 일부 RecyclerView에서, 아이템들이 다 표시되지 못하고 데이터보다 더 적게 표시되는 현상이 계속 발생했었습니다. 로그를 달아보니, list의 아이템들이 정확하고 list.size()도 정확한데, size보다 더 적은 아이템들이 계속 표시되는 현상이었습니다. 별다른 해결책을 찾지 못하고 잊어버리고 있었는데, 최근 여러개의 RecyclerView를 다시 써야 할 일이 생겨서 보니 또 다시 이런 현상이 발생하였습니다. 원인은... 정확하게는 알 수 없고, ScrollView와 RecyclerView간에 버그가 있는것 같습니다. 단, 해결책은 정확합니다. Scrol.. 2020. 4. 23.
RecyclerView의 스크롤 차단하기 1한 뷰에 여러개의 RecyclerView를 사용하는 경우, 아래와 같이 ScrollView 안에 Recyclerview를 넣게 됩니다. 이때 RecyclerView의 스크롤을 차단해 주지 않으면 ScrollView와 충돌하게 되어 이중스크롤이 되게 됩니다. 1. 아래와 같은 코드를 사용하면 RecyclerView의 스크롤을 차단할 수 있습니다. mRecyclerview.setLayoutManager(new LinearLayoutManager(this){ @Override public boolean canScrollVertically() { return false;//세로스크롤 차단 } @Override public boolean canScrollHorizontally() { return false;//.. 2020. 4. 23.
Stroke의 색상을 동적으로 바꾸기 안드로이드의 drawable에 다음과 같이 사용자 정의 drawable resource를 만들 수 있습니다. 해당 drawable resource를 round_box.xml로 정의하고 backgound로 설정해주면 아래와 같이 나타납니다. 아래와 같은 코드를 사용하시면 코드상에서 동적으로 stroke의 색상을 변경할 수 있습니다. RelativeLayout searchBackground = mainView.findViewById(R.id.search_bar); GradientDrawable mGradientDrawable = (GradientDrawable) searchBackground.getBackground(); mGradientDrawable.setStroke(10, Color.RED); 자세한 .. 2020. 4. 23.
java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration Google Drive API를 통해 로그인 할때 발생하였습니다. debug 할때는 발생하지 않았는데 release 빌드 후 앱을 설치하여 테스트 하니 발생하는것을 확인했습니다. 발생원인은 API Console에 Oauth 2.0 클라이언트 ID를 등록하지 않아서 발생하는 문제입니다. 앱 여러개에 구글 로그인 기능을 추가하다 보니, 한 앱에는 debug SHA-1 key만 등록하고 release SHA-1 key는 등록해놓지 않았네요. 이참에 SHA-1 Key를 등록하는 부분을 기록해 두고자 합니다. 구글에서 제공하는 API들을 사용하기 위해서는 API Console에 인증정보를 등록하는 작업을 해야합니다. API Console에서 사용자 인증정보>OAuth 클라이언트 ID를 통해서 해당 키를 등록할 수.. 2020. 4. 22.
Duplicate Platform Classes--- Error: commons-logging---/Error: httpclient defines classes Google Drive API 적용 중 발생한 Exception 입니다. Debug 빌드로 테스트할때는 잘되었는데 release 빌드시에는 아래의 오류가 발생하며 앱이 빌드되지 않는 현상이 발생합니다. Error: commons-logging defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the libra.. 2020. 4. 22.
"kind":"drive#fileList","incompleteSearch":false "kind":"drive#fileList","incompleteSearch":false 구글 DriveAPI 사용시 위 오류가 발생하며 API가 동작하지 않았습니다. 위 오류 외에도 파일 생성을 하고 확인하면 "untitled name" 과 같은 파일명을 return 할 뿐입니다. 해당 오류의 원인은 proguard 설정에 있습니다. proguard-rules.pro에 다음과 같은 내용을 추가해 주시면 해결됩니다. -keep class * extends com.google.api.client.json.GenericJson {*;} -keep class com.google.api.services.drive.** {*;} 2020. 4. 21.