처음 안드로이드 스튜디오를 설치하고 스마트폰 앱을 개발하는 경우 대부분 AVD 가상 장치를 이용하여로 테스트를 진행 하는데 어느정도 완성이 되면 실제 핸드폰을 이용하여 테스트를 해야 합니다.이때 핸드폰을 개발자 모드로 설정 하였지만 컴퓨터에 연결을 해도 Android Studio에서 인식을 하지 못하여 테스트를 할 수 없는 상황을 격게 됩니다.물론 어떤 기종의 스마트폰은 USB로 연결 하자 마자 쉽게 인식이 되는 경우도 있고 어떤 기종은 계속 오류가(오류라기 보다는 연결이 안됨) 발생 합니다.
위의 그림은 스마트폰을 USB로 연결하여도 디바이스를 찾지 못하고 가상 디바이스만 나타나는 현상 입니다.이런 경우는 컴퓨터 운영체제 버전이 낮거나 업데이트가 안되어 스마트폰 드라이버를 지원하지 못하여 발생하는 경우가 많습니다. 즉 스마트폰용 USB 드라이버가 설치되지 않아서 인식을 못하는 상황이 발생한 것입니다.
확인을 하려면 스마트폰을 USB로 연결하고 [드라이버 소프트웨어 설치] 창을 열어보면 오래된 운영체제 또는 업데이트가 안된 경우 드라이버를 찾지 못하여 계속 찾기를 반복만 하고 있습니다.
이 글에서는 제가 사용하고 있는 삼성폰으로 설명을 진행 하지만 다른 제조 회사 제품도 동일한 현상이 발생하면 아래의 방법으로 해결을 하면 되는데 인식이 안되는 스마트폰은 제조사 마다 USB 드라이버를 제공하고 있으니 제조사 홈페이지에 들어가 통합 드라이버를 다운받아 설치를 진행 하면 간단히 해결 할 수 있습니다.
SAMSUNG_USB_Driver_for_Mobile_Phones.exe 를 클릭 하면 드라이버 다운로드가 바로 진행되고 완료 되면 실행 하여 드라이버 설치를 진행 합니다.설치 작업은 대부분 기본 설정된 버튼을 클릭 하면 됩니다.
여기 까지는 설치를 위한 설정 진행입니다.
이제 [설치] 버튼을 클릭 하면 드라이버 설치가 진행 됩니다.
설치가 진행 되고
설치가 완료되면 [마침] 버튼을 클릭 하여 종료 합니다.경우에 따라 바로 장치를 인식하는 경우도 있고 컴퓨터를 재시작 해야 스마트폰을 인식하는 경우도 있습니다.저는 Windows 7인데 다시 시작을 해야 인식이 되었습니다.윈도우 창 우측에서 [드리이버 소프트웨어 설치] 창을 열어보면
계속 찾기로 빙빙 돌던 아이콘이 체크로 변하고 상태도 [사용 준비 완료]로 변경 되어 있고 스마트폰을 사용할 수 있는 상태가 된 것 입니다.
안드로이드 스튜디오를 열어보면 데스트 디바이스가 가상 디바이스에서 연결된 실제 스마트폰으로 변경된 것을 확인 할 수 있습니다.
이제부터는 상황에 따라 가상 디바이스 또는 실제 스마트폰을 선택하여 테스트할 수 있는 환경이 마련 되었습니다.
Relativelayout은 View의 상대적 위치를 이용하여 위치를 설정하는 방법입니다. 상대적 위치를 이용하여 View 들을 정렬 하므로 기준이 되는 View는 ID 값 설정이 필수적 입니다.RelativeLayout은 중첩된 View 그룹을 없애고 레이아웃 계층 구조를 평면으로 유지하여 성능을 개선 하고 중첩된 LinearLayout을 대체할 수 있습니다.
1. 기준 View와의 상대적 위치
기준 View를 중심으로 추가되는 View의 위치를 위, 아래, 왼쪽, 오른쪽 등 상대적 위치에 위치 시키는 옵션 입니다. 상대적 위치의 설정 값으로 기준 View의 ID가 사용되므로 기준이 되는 View에는 꼭 아이디 값이 부여되어 있어야 합니다.
위와 같이 기준이 되는 View가 좌측 상단에 위치하게 되면 상단과 좌측에 있는 View는 보이지 않는 영역으로 나가게 됩니다. 그래서 새로운 예제에서는 android:layout_centerInParent = "true" 를 사용하여 기준 View를 중앙에 위치 시켰고 다른예제에서도 동일한 현상이 발생하는 경우 기준 View의 위치를 잡아주는 방법을 사용하였습니다.
기준 View를 기준으로 좌측, 우측, 상단, 하단의 끝 선을 정렬하는 기능입니다.예제에서는 각 정렬 별로 View를 하나씩만 표현하여 보았습니다. 끝 선을 맞추기 위하여 모든 View에는 기준이 되는 View의 ID 값인 android:layout_alignBottom="@+id/cntText" 을 포함하고 있습니다.
부모 창의 좌측, 우측, 상단, 하단에 View을 정렬하는 방법입니다.기준이 되는 View는 존재하지 않고 부모 창에 원하는 위치를 잡아 View를 배열하는 방법입니다. 여기서도 상대적 위치가 없으면 모든 View가 Top으로 모여 겹쳐 보이기 때문에 일부 View에 상대적 위치를 추가하여 표현하였습니다.
개인적으로 프로젝트의 성공 여부는 70%가 디자인이라고 생각합니다. 메인 시안이 어떻게 나오는가에 따라 코딩을 하나도 하지 않았어도 고객이 바라보는 시선이 달라지는 경우가 있습니다. 디자인감각도 있고 구현에 대한 기능적인 부분까지 갖추어 진다면 얼마나 좋을까요.
오늘은 리니어레이아웃의 기본적인 옵션들에 대한 사용 방법으로 버튼, 텍스트, 이미지 등을 원하는 곳에 위치시키는 방법에 대해 공부해 봅니다. 설명을 끝내고 나니 아래 글을 읽을 때 위젯과 뷰(View : TextView, Button 등을 가리킴) 단어를 같이 사용하여 혼란이 있을 수 있으나 동일한 내용입니다.
LinearLayout에 사용되는 설정 값들은 아래와 같습니다
옵션
설명
orientation
layout의 정렬 방향으로 행 "horizontal", 열 "vertical"을 뜻한다.
baselineAligned
기준점을 설정해서 정렬하는 기능으로 false로 설정하면 baselines 정렬을 하지 않는다.
baselineAlignedChildIndex
linear layout이 다른 layout의 부분일 경우 몇 번째 위젯에. 정렬의 기준을 정할 것인가에 대한 순번으로 0부터 시작 한다.
divider
Drawable을 button 사이의 구분자로 사용 한다.
gravity
뷰 자신은 영역 내에서 특정 위치를 설정 한다
measureWithLargestChild
true 로 설정 하면 layout 내 weight을 가지는 모든 뷰의 크기를 가장 큰 뷰의 크기로 변경 시킨다.
weightSum
위젯에 사용된 weight 들의 합계.
1. 방향(orientation)
LinearLayout의 orientation은 가장 기본적이고 필수적인 설정으로 뷰(view)들을 수직(vertical) 또는 수평(horizontal)으로 정렬 하는데 사용 합니다.
divider는 말 그대로 나누는 건데 뷰 중간에 이미지를 사용하여 좀 더 레이아웃을 예쁘게 꾸며 주는 옵션입니다.사용하려면 미리 이미지를 만들어 @drawable에 추가를 해야 합니다.저는 대충 기존에 있는 아이콘을 사용하여 구현을 해 보았습니다.최악의 디자인이 되겠군요.
안드로이드 앱은 핸드폰의 제한된 공간에서 작동 되는데 앱 외부에 있는 리소스(카메라, SMS, 저장공간 등)에 접속 하기 위해서는 핸드폰 소유자의 접근
허가 권한을 받아야 이용이 가능 합니다. 물론
Android 5.1(API 수준 22) 이하에서 실행하는
기기에 설치된 앱 이라면 권한이 설정 만으로도 자동으로 부여되므로 허가 요청은 필요하지 않습니다.
권한을 요청하는 순서대로 설명을 하면
1. 권한 설정
앱에서 필요한 권한을 AndroidManifest.xml 파일에 등록을
해야 합니다. 문법은