카카오톡 처럼 키보드 위에 이모티콘이 뜨는 뷰를 만들고 싶었다

여러가지 방법 중 PopupWindow 라는 걸 찾아서 구현해 보았다.

 

1. 키보드 높이 구하기

키보드 높이를 구하는 방법도 여러가지가 있다

이 부분은 검색을 통해 여러가지 샘플들을 참고했다

 

2. PopupWindow

키보드의 높이를 구하고 키보드의 높이만큼 PopupWindow의 뷰의 높이를 설정해준다.

 

3. 소스코드

https://github.com/thoon-kim/PopupWindowDemo/

 

코드가 어렵지 않아 코드에 대한 설명은 따로 필요없을 것 같고

코드를 참고하면 쉽게 원하는 대로 구현할 수 있을 것이다

 

 

모듈의 독립성을 판단하는 지표이다.

 

결합도 : 모듈과 모듈간의 상호 의존 정도
응집도 : 모듈 내부의 기능적인 집중 정도

 

좋은 모듈화는 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화하는 것이다.

 

개별 모듈은 독립적으로 자신에게 주어진 기능만 수행하고 명확한 결과를 내놓아야하고
다른 모듈에 의존성이 높아선 안된다.

 

결합도는 낮을수록 / 응집도는 높을수록 이상적인 모듈화

 

결합도

어떤 모듈이 다른 모듈에 의존하는 정도
독립적인 모듈 => 결합도가 약하다

 

결합도의 종류

자료 결합도 < 스탬프 결합도 < 제어 결합도 < 외부 결합도 < 공통 결합도 < 내용 결합도

 

자료 결합도(Data Coupling)

모듈간 인터페이스 전달되는 파라미터를 통해서만 모듈간의 상호 작용이 일어나는 경우
 단순자료만 매개변수로 전달, 참조

 

스탬프 결합도(Stamp Coupling)

모듈간 인터페이스 배열이나 오브젝트, 스트럭쳐등이 전달되는 경우
 자료구조(배열, 리스트, 객체 등)를 매개변수로 전달, 참조

 

제어 결합도(Control Coupling)

처리할 대상 값만 전달되는 것이 아니라 어떻게 처리를 해야한다는 제어 요소(Flag)가 전달되는 경우
 논리적 흐름을 제어하기 위한 제어 플래그나 정보를 전달

 

외부 결합도(External Coupling)

어떤 모듈에서 반환한 값을 다른 모듈에서 참조해서 사용하는 경우
 외부 환경(특수 H/W, 통신 프로토콜, OS, 컴파일러 등)과 연관된 경우

 

공통 결합도(Common Coupling)

파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우
 두 모듈이 같은 전역변수를 공유하는 경우

 

내용 결합도(Content Coupling)

다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용 하는 경우
 한 모듈이 다른 모듈의 내부 기능 및 자료를 직접 참조하는 경우

 

응집도

하나의 모듈이 하나의 기능을 수행하는 요소들간의 연관성 척도
독립적인 모듈 => 응집도가 강하다

 

응집도의 종류

우연적 응집도 < 논리적 응집도 < 시간적 응집도 < 절차적 응집도 < 교환적 응집도 < 순차적 응집도 < 기능적 응집도

 

기능적 응집도(Functional Cohension)

모든 기능이 단일한 목적을 위해 수행되는 경우
 모듈 내 모든 요소들이 단일 기능을 수행

 

순차적 응집도(Sequential Cohension)

한 활동으로 부터 나온 출력값을 다른 활동이 사용할 경우
 모듈 내의 한 요소의 출력 자료가 다음 요소의 입력 자료로 사용

 

교환적 응집도(Communication Cohension)

동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우
 모듈 내의 요소들이 동일한 입출력 자료로 서로 다른 기능을 수행

 

절차적 응집도(Procedural Cohension)

다수의 관련 기능을 가질 떄 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우
 모듈 수행 요소들이 반드시 특정 순서대로 수행

 

시작적 응집도(Temporal Cohension)

연관된 기능이라기 보단 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우
 특정 시간에 실행되는 기능들을 모아 작성된 모듈

 

논리적 응집도(Logical Cohension)

유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
 논리적으로 유사한 기능을 수행 하지만 서로의 관계는 밀접하지 않음

 

우연적 응집도(Coincidental Cohension)

각 구성요소들이 연관이 없을 경우
 모듈 내 요소들이 뚜렷한 관계가 없이 존재

안드로이드에서 룰렛을 구현하고 싶었다.

이미지를 활용하여 이미지만 회전시키는 형식의 룰렛은 많았지만

내가 직접 값을 입력할 수 있고 갯수를 설정하여 만드는 것에 대한 예시는 없었다.

그래서 직접 구현해 보았다.

 

1. 기본 UI 구현

간단하게 버튼 두 개와 가운데 룰렛을 그려줄 레이아웃 그리고 회전 버튼을 추가한다.

 

2. drawArc를 사용하여 호 그리기

canvas.drawArc() 의 매개변수를 설명하자면

 - temp : Arc를 그릴 시작 각도

 - sweepAngle : Arc의 각도

정도 이해하면 되겠다.

 

호를 그린 다음에 텍스트를 가운데 입력해주고 싶었는데 이 부분이 굉장히 어려웠다.

 

삼각함수를 활용하여 호의 중점을 알아내고

호의 중점과 원의 중점 가운데에 텍스트를 입력할 수 있도록 했다.

 

setRandom을 통해 호에 들어갈 숫자들을 랜덤으로 설정할 수도 있다.

getResult는 회전한 각을 계산하여서 결과값을 뽑아내는데

조금 더 간단하게 구현하고 싶었지만 방법을 알아내지 못하여 코드가 지저분하다. ㅠ.ㅠ

 

위의 버튼을 클릭하면 1, 2와 같이 룰렛이 그려지고 spin을 클릭하면 결과값을 받아올 수 있다.

 

3. 소스 코드

https://github.com/thoon-kim/ThRoulette/

개발을 하다보면 다양한 구조의 View를 만들때가 있다.

ScrollView 안에 ListView를 넣고 싶었는데

두 개가 같이 스크롤 되어 가끔 스크롤이 제대로 동작하지 않는 문제가 발생했다.

그래서 ListView의 크기를 고정시켜 스크롤이 작동하지 않도록 하는 방법을 생각해봤다.

 

1. 기본 UI 구현

먼저 스크롤 뷰의 ChildLayout에 LinearLayout을 넣어주고 텍스트뷰와 리스트뷰를 위치시킨다.

ScrollView의 fillViewport="true"로 설정하여 스크롤뷰가 화면 전체를 차지하도록 한다.

 

 

2. Java에서 ListView 크기 설정

리스트뷰 아이템의 크기를 측정하고 높이를 모두 합하여 ListView의 Height를 설정한다.

 

 

다음과 같이 동작하는 것을 확인할 수 있다.

 

 

3. 소스 코드

https://github.com/thoon-kim/ListScroll

build.gradle 이란?

모듈의 빌드 방법이 정의된 빌드스크립트

빌드에 사용할 SDK버전부터 어플리케이션 버전, 사용할 라이브러리 등 다양한 항목을 설정할 수 있다.

 

build.gradle(Project : ${ProjectName})

Top-level build file where you can add configuration options common to all sub-projects/modules.

각각의 프로젝트에는 최상위 gradle 파일이 포함되어 있다.

일반적으로 모든 모듈에 대한 공통 구성을 포함한다.

 

build.gradle(Module : app)

Build file of your specific module (where you add your dependencies, signing configs, build types, flavors, etc)

모든 모듈은 특정 gradle 파일이 있다.

gradle 파일에 무엇이 포함되어 있든지 간에, 오직 포함된 모듈에만 영향을 미친다.

 

 

[출처]

https://stackoverflow.com/questions/28295933/difference-between-build-gradleproject-and-build-gradlemodule

 

Difference between build.gradle(Project) and build.gradle(Module)

I am trying to add a dependency of Android Asynchronous Http Client into my project. So there are two build.gradle files are there in the project. As per my understanding, there are different kind...

stackoverflow.com

 

 

리사이클러뷰에 LayoutManager가 설정되어 있지 않는 경우 발생하는 Error

 

Error Message

: E/RecyclerView: No layout manager attached; skipping layout

 

해결 방법

: RecyclerView.setAdapter 이전에 setLayoutManager를 실행

 

'Android Programming > Android Error' 카테고리의 다른 글

안드로이드 Toolbar Error  (0) 2020.01.15

Toolbar가 이미 있는데 DrawerLayout에서 Toolbar를 따로 설정해주었을 때 오류 발생

 

Error Message

: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

 

해결 방법

: manifest에서 DrawerLayout을 사용하는 Activity의 스타일을 NoActionBar로 변경하여 해결

 

 

'Android Programming > Android Error' 카테고리의 다른 글

리사이클러뷰 설정 Error  (0) 2020.01.15

+ Recent posts