Software/Android2015. 2. 2. 18:01

참고하고 기억해야할 계층표입니다.

저작권 때문에 PPT로 다시 만들긴 했는데, 어떨지 모르겠네요.


1.위젯




2.뷰그룹




'Software > Android' 카테고리의 다른 글

리니어 레이아웃과 배치  (0) 2015.02.04
앱의 전체적인 화면 방향의 설정과 고정  (0) 2015.02.04
setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
Posted by 십자성군
Software/Android2015. 1. 29. 17:50

setContentView는 MainActivity에서 제일 처음 볼 수 있다. 이 메서드를 호출하여 액티비티에 내용물을 채우게 되는데, 단독으로 뷰가 존재하기도 하지만, 차일드 뷰를 거느리는 경우가 많다. 이런 차일드로 구성된 레이아웃을 액티비티에 채우게 되는데 이를 위한 setContentView는 두 가지 호출법이 있다.


void Activity.setContentView(int layoutResID)

void Activity.setContentView(View view [, ViewGroup.LayoutParams params])


첫째 방법은 xml에 레이아웃을 만들고 이에 부여된 ID를 setContentView에 전달하여 호출한다.

둘째 방법은 뷰 객체를 동적으로 생성한 후 메서드를 통해 호출하는 방법이다.

'Software > Android' 카테고리의 다른 글

앱의 전체적인 화면 방향의 설정과 고정  (0) 2015.02.04
위젯와 뷰그룹의 계층  (0) 2015.02.02
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
Posted by 십자성군
Software/Android2015. 1. 29. 17:45

Java는 디폴트 인수를 지원하지 않습니다. 따라서 인수의 개수에 따라서 이에 대한 메서드가 일일이 중복 정의되어 있습니다.

생략 가능한 인수는 []로 표기하기로 하기 때문에 아래와 같은 선언이 가능합니다.


void Activity.setContentView(View view [, ViewGroup.LayoutParams params])

'Software > Android' 카테고리의 다른 글

위젯와 뷰그룹의 계층  (0) 2015.02.02
setContentView()  (0) 2015.01.29
용어  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
안드로이드 새 프로젝트 만들기  (0) 2015.01.29
Posted by 십자성군
Software/Android2015. 1. 29. 15:38

개발이든 이론공부든 모두 기본적인 용어, 개념을 알아야 대화가 통합니다. 프로그래밍의 기본적인 용어를 다루지는 않지만 안드로이드 개발중에 자주 사용하게 될 용어, 개념들을 다루겠습니다.


안드로이드 응용프로그램의 4가지 주요 구성요소

Activity(액티비티)

사용자 인터페이스를 구성하는 기본단위입니다.

우리가 보는 '화면 하나'가 액티비티인데, 하나의 액티비티가 스크롤이나, 레이아웃, 뷰 등으로 구성됩니다.

우리가 만드는 응용프로그램은 하나 이상의 액티비티를 가지게 되며 이 액티비티 사이들 넘나들게 됩니다.


Service(서비스)

UI없이 백그라운드에서 무한히 실행되는 컴포넌트라고 합니다. 미디어 플레이어, 네트워크 감시 등 UI가 없지만 '사용자의 명령을 받아들일 수 있는 액티비티'와 연결해서 사용됩니다.


Content Provider(콘텐츠 제공자): CP

안드로이드의 보안에 의해, 다른 프로그램의 데이터에 함부로 엑세스 하지 못합니다. 이러한 데이터 공유를 위한 합법적인 장치가 CP입니다.(데이터베이스 등)


Broadcast Receiver(방송수신자): BR

배터리 방전, 네트워크 전송 완료 등의 신호를 받습니다. 즉, 시스템에서 전달되는 방송을 대기하고 수신합니다.

방송 수신 시 이를 해석하고 적절한 액티비티나 서비스를 띄웁니다.

-----------------






MainActivity : 메인 액티비티의 소스 파일입니다. 앱을 시동했을 때 기동하는 중심이 되는 액티비티 입니다.

R.java : 응용프로그램 내의 각종 개체에 접근하기 위한 ID를 정의합니다. 예를들어 액티비티 내의 String, 버튼 등은 각자의 ID를 가지고 있습니다. 개발자가 편집할 일은 없습니다.

Library, lib 폴더 : 안드로이드 기본 라이브러리입니다.

bin : 컴파일의 중간 결과 파일이 저장됩니다.

asset : 비디오, 오디오 등의 리소스가 들어가는 폴더입니다.

drawable : 이미지 파일이 저장됩니다. l, m, x등 해상도별로 각각 제공됩니다.

layout/activity_main.xml : 레이아웃을 정의합니다. 즉, 버튼, 배경, 글 등을 배치하여 디자인 합니다.

menu/activity_main.xml : 메뉴를 정의합니다.

values/string.xml : 앱상에서 배치되는 문자열을 정의합니다.

AndroidManifest.xml : 프로젝트의 버전, 이름, 구성 등의 정보를 지닙니다.(최소 타겟 버전 등)


<액티비티, 뷰, 레이아웃>

Activity(액티비티)

앞에서 언급했지만 다시 언급합니다.


사용자 인터페이스를 구성하는 기본단위입니다.

우리가 보는 '화면 하나'가 액티비티인데, 하나의 액티비티가 스크롤이나, 레이아웃, 뷰 등으로 구성됩니다.

우리가 만드는 응용프로그램은 하나 이상의 액티비티를 가지게 되며 이 액티비티 사이들 넘나들게 됩니다.


View(뷰)


앞서 언급했듯이 액티비티는 화면 하나를 표현합니다. 이 설명에서 약간 오해가 생길 수 있는데, 우리 눈에 보이는 것은 액티비티가 아니라 액티비티에 포함되어 있는 '뷰' 입니다. 뷰 여러 개가 모여서 하나의 액티비티를 이루며 결국 우리들이 보는것은 뷰들의 집합인 것입니다. 그리고 액티비티가 여럿 모여서 하나의 응용 프로그램이 됩니다.


대략 아래와 같은 느낌입니다.


실제로 우리 눈에 보이는것은 액티비티 안의 뷰 인겁니다.


뷰는 크게 위젯과 뷰그룹으로 분류됩니다.

위젯

: 사용자 인터페이스를 구성하는, 직접적으로 보이는 요소입니다. 버튼, 텍스트 등을 위젯이라고 부르며 사용자에게 정보를 보여주고 명령을 받을 수 있으므로 컨트롤이라고도 합니다.

뷰그룹

: 위젯과는 달리 직접적으로 보이지는 않습니다. 여러가지 연관성 있는 뷰들을 유기적으로 결합하여 서비스를 제공하는 뷰의 집합으로 이들을 레이아웃이라고 합니다.


Layout(레이아웃)

앞서 설명했듯이 ViewGroup으로부터 파생되는 클래스로, 다른 뷰를 차일드로 포함합니다.

버튼, 텍스트 등의 기본 위젯을 모아서 하나의 레이아웃을 구성할 수 있으며 레이아웃이 여러 개 모여서 하나의 액티비티 화면이 완성됩니다.

'Software > Android' 카테고리의 다른 글

setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
안드로이드 새 프로젝트 만들기  (0) 2015.01.29
안드로이드 개발환경 구축  (0) 2015.01.27
Posted by 십자성군
Software/Android2015. 1. 29. 13:45

이것저것 짜기전에 일단 돌아가는지 확인해 봅시다!


앱의 동작을 확인하려면 debugging을 하거나 run해야 합니다.

이를 AVD(Android Virtual Device)로 구동해 볼 수 있고, 실제 스마트폰으로 구동해 볼 수 있습니다.


우선 AVD를 설정해 봅시다.

ADT를 eclipse에 설치했다면 eclipse의 window 메뉴에 활성화 SDK업데이트나 AVD가 있겠지만 필자의 경우는 그렇지 않았기에

C:\Program Files\Android\android-sdk

에서 AVD Manager를 실행시켰습니다.


AVD Manager에서 가상머신을 추가한 예가 아래의 사진입니다.




그럼 우리가 만든 기본 프로젝트를 실행시켜 봅시다.

Run의 Run configuration 에서

Android Application을 더블클릭 하면 새로운 Run 환경이 생성됩니다. 대상 프로젝트를 선택할 수 있으며 Target메뉴에서 항상 실제 디바이스에서 실행할 것인지, 가상머신을 사용할 것인지 등을 선택할 수 있습니다.




위 사진에서와 같이 Device, VD를 선택할 수 있습니다. 다만, Device에서 실행하려면 개발자모드를 활성화 시켜놓고, 이를 위한 드라이버를 설치해야 합니다.




제대로 동작함을 확인할 수 있습니다.


'Software > Android' 카테고리의 다른 글

setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
안드로이드 새 프로젝트 만들기  (0) 2015.01.29
안드로이드 개발환경 구축  (0) 2015.01.27
Posted by 십자성군
Software/Android2015. 1. 29. 11:26

참조 : http://blog.naver.com/vitaminsense/220184872899


최신 SDK로 업데이트 했을 경우 새 프로젝트를 만들면 appcompat_7에 에러가 발생합니다.




위와 같이 되도록 최신 버전으로 프로젝트를 생성하고, 매니페스트에서 minSdkVersion을 수정해 줍시다.

그런데 최신버전으로 하면 appcompat이 생성안되기도 합니다.



'Software > Android' 카테고리의 다른 글

setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
안드로이드 개발환경 구축  (0) 2015.01.27
Posted by 십자성군
Software/StarUML2015. 1. 28. 11:55

실험실에서 제작하는 모든 프로젝트에 공통적으로 적용하기 위한 App을 만들게 되어 이를 위한 설계과정에서 UML을 다루고자 합니다.


본인의 Programming 실력이 뛰어나지 않기에, 수준이 낮을 수 있지만 StarUML이라는 소프트웨어를 사용하기 위한 글이라는 점에 이해바랍니다.


StarUML은 아래 사이트에서 받을 수 있습니다.

http://staruml.io/


아래 사이트에서 구버전 사용자 가이드를 확인할 수 있습니다. 한글이기 때문에 읽기 편합니다.

http://staruml.sourceforge.net/


실질적인 사용은 제가 만들어야 하는 App을 기준으로 진행하겠습니다.

Posted by 십자성군
Software/Android2015. 1. 27. 10:27

안드로이드 앱을 만들어야 해서 하는김에 자료를 만들어 두려고 합니다.


개발환경 설정은 크게 n가지로 나눕니다.


1. eclipse설치

2. JAVA JDK 설치(목적에 따라 JAVA SE or EE)

3. 환경변수 설정

4. SDK, ADT 설치

5. 스마트폰 개발자 옵션 활성화


1.

https://www.eclipse.org

에 들어가서 IDE를 받아 설치합니다. 저는 

Eclipse IDE for Java EE Developer

를 설치했습니다. 보통 Java Developers를 설치해도 문제 없습니다.

2.
오라클 홈페이지로 들어가서 Java SE를 설치합니다. 용도에 따라서 EE를 설치하는 경우도 있습니다.
JDK, JRE를 선택할 수 있는데, JDK를 설치하면 됩니다.(JDK에서 JRE를 포함합니다.)

라이센스 동의 하시고 설치를 합시다.


3.(출처 : http://blog.naver.com/code1st/220118711916)

Java의 콘솔 입출력 과정과 컴파일 과정에서 명령 프롬프트(cmd)를 통해 컴파일 하는 과정이 있습니다. 이 경로를 함축적으로 표현하기 위해 환경변수를 설정합니다.

우리가 ~.java파일을 만들고 컴퓨터가 읽기위한 .class파일로 컴파일 하는것이 javac입니다. 환경변수를 설정해주면 명령프롬프트에서 간단히 java컴파일러 및 java를 실행할 수 있게됩니다.


내컴퓨터->속성->고급 시스템 설정->환경 변수



시스템 변수를 아래와 같이 새로 만들어 줍시다.



Path라는 시스템 변수에 JAVAHOME의 bin폴더를 넣어줍니다. 단, 각각의 경로를 ; 로 구분해야함을 잊지맙시다.



JAVAHOME의 lib폴더를 CLASSPATH라는 이름으로 만들어 줍니다.



명령프롬프트에서 3가지 명령을 해봅시다

javac -version

java -version

echo %CLASSPATH%


환경변수 설정이 제대로 되었다면 대략 아래와 같은 결과가 나옵니다.



4.

이제 이클립스를 통한 안드로이드 개발을 위해서 이와 관련된 Tool를 받아야 합니다. Virtual Device등을 설치하기 위해서 Android SDK를 설채해야 합니다.

http://developer.android.com 로 접속합니다.


Download에서 other download options


windows용 Android SDK Tool을 받읍시다.

Android studio를 써보지는 않았지만 eclipse와는 별개의 IDE로 보입니다. 이클립스 환경에서 개발하시던 분은 굳이 개발환경을 바꿀 필요는 없겠죠?


다운로드 받으신 후 쭉- 설치하시면 됩니다. 설치 후 SDK Manager를 실행하면 설치할 API버전이 나열됩니다. 저희들이 개발한 버전에 맞추어서 설치하시면 됩니다.

개인적으로 최신, 최저 및 타겟API버전 3종류를 설치하시면 될것 같습니다.

참고로 저는 금일 기준으로 5.0.1, 4.4.2, 4.2.2, 4.0, 2.1, 2.2를 설치하였습니다.



SDK는 이클립스에서 설치할 수 있습니다. 자세한 사항은 아래에서 확인

http://blog.lul.kr/54


eclipse -> help install new software에서 설치를 위한 URL을 Add합니다.

(httpps://dl-ssl.google.com/android/eclipse/)


다 설치해도 무방하며 ndk는 필요한 경우가 아니면 설치하지 않아도 됩니다.



5.

스마트폰의 개발옵션 활성화는 아래를 참고하였다.

http://ha-roo.com/220244125465


옵티머스 g2기준으로 설정->일반->휴대폰 정보->소프트웨어 정보

소프트웨어 정보에서 빌드 번호를 마구 터치해주면 됩니다.

이후 '일반'에서 활성화되는 개발자 옵션에서 디버깅의 'USB 디버깅'을 체크해 줍시다.

'Software > Android' 카테고리의 다른 글

setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
안드로이드 새 프로젝트 만들기  (0) 2015.01.29
Posted by 십자성군
Software/Programming2015. 1. 11. 03:10


'Software > Programming' 카테고리의 다른 글

volatile(Java)  (0) 2016.04.15
volatile(C,C++)  (0) 2016.04.15
MFC)버튼을 누르는 동안 지속되는 카운팅 예제  (2) 2014.10.19
비트필드(Bit Field)  (0) 2014.08.11
[비선형 자료구조]트리.그래프 (AVL 트리)  (1) 2013.05.25
Posted by 십자성군
Software/Programming2014. 10. 19. 17:11

주요 개념

1. Sub Classing

2. Thread

3. Counting & Delay


목표

-Button을 꾹~ 누르는 동안 Edit Control의 숫자를 자동으로 상승시키기.

-일반적인 Button Counting도 함께 합니다.

--------------------------------------------------------------

일단 따라해 봅시다.

1. 일반적인 Button Counting


1.MFC 새 프로젝트를 만듭니다. 프로젝트명은 MFCButtonCounting라고 하겠습니다.

2.아래와 같이 오브젝트를 배치합니다.



Edit Control ID : IDC_EDIT1, IDC_EDIT2

Button ID : IDC_BUTTON1, IDC_BUTTON2



누르는 동안의 Counting에 사용할 버튼과 Edit는 상단의 IDC_BUTTON1과 IDC_EDIT1 입니다.

2는 그냥 버튼 Counting에 사용하겠습니다.


MFCButtonCountingDlg.h에 public으로 int EDText1변수를 만들었습니다. 

Dialog 리소스에서 해당 오브젝트에 우클릭 후 변수추가를 해주면 됩니다.


일단 평범한 버튼카운터를 만들어 봅시다. 잘 아시는 분은 넘어가셔도 좋습니다.


Button2의 속성의 컨트롤 이벤트에서 BN_CLICKED를 활성화 해 주었습니다.

우리는 생성된 OnBnClickedButton2를 Overriding해주면 됩니다.



public영역에서 2개의 변수와 하나의 함수를 발견할 수 있습니다. cpp로 가서 OnBnClickedButton2()를 아래와 같이 작성해 줍시다.

EDText2+=1;

UpdateData(FALSE);


실행시키시면 버튼2를 누를때마다 숫자가 증가함을 확인할 수 있습니다.



2. 지속되는 Button Counting

위와같이 일반적인 카운터은 쉽게 만들 수 있으나 버튼을 누르는 동안 지속되는 카운터는 몇가지 고려해야 할 사항이 있습니다.

첫째로 MFC에서는 누르는동안 실행해주기 위한 함수는 제공하지 않습니다.

둘째로 버튼을 누르고 카운팅하는 동안 다른 동작이 정지해서는 안됩니다.


두번째 문제는 Thread를 사용해서 쉽게 해결할 수 있습니다.

첫번째 때문에 저희가 이를 위한 함수를 만들어야 하는거죠.

이를 위한 해결책을 두가지 제시할 수 있는데 첫째가 PreTranslateMessage이고 둘째가 Sub Classing입니다.


PreTranslateMessage를 통해 우리는 소프트웨어에서 발생하는 모든 메시지를 가로채서 이에 대한 처리를 할 수 있습니다.

SubClassing을 사용하면 만들기는 조금 귀찮아질 수 있으나 원하는 메시지에 대해서만 처리시킬 수 있습니다. 여기서는 SubClassing을 사용합니다.


SubClassing을 사용해서 Button1에 대해 종속되는 Class를 하나 생성할 것입니다.


1.

프로젝트->클래스 추가를 통해 MFC클래스를 만들어 줍니다.


위와 같이 만들어 줍니다.


2.

클래스마법사를 이용해서 다음과 같이 메시지 함수를 오버라이딩 합니다.

버튼을 눌렀을때와 뗐을때의 메시지를 만들었습니다.


3.


'GetParent()->'로 부모클래스의 객체를 불러오고

PostMessageW를 사용해서 부모 클래스에 메시지를 보냅니다. GetDlgCtrlID()를 통해 부모객체 여기서는 BUTTON1의 아이디 IDC_BUTTON1을 참조할 수 있습니다. 여기서 +몇을 해 주어도 상관 없습니다.

후에 부모클래스에서 OnCommand를 통해 받는 파라메터값이 됩니다.


Dlg의 헤더에 아래 변수를 추가합니다.


private:

ButtonClass m_TestButton;


m_TestButton : 앞서 작성한 클래스형의 변수입니다.


아래와 같이 초기화를 해줍니다.


이렇게 m_TestButton은 IDC_BUTTON1의 서브클래스가 되었습니다.

이걸로 서브클래스에서 작성할 것은 끝났습니다.


4.

이제 Thread를 만듭니다.


Dlg 헤더파일에 다음을 추가로 작성해 줍시다.


public:

CWinThread* CountingThread;

LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);


private:

ButtonClass m_TestButton;

virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);


CountingThread : Thread 포인터 변수입니다.

OnCommand : 클래스가 메시지를 받았을 때의 동작을 정하는 함수입니다.

OnUpdateData : 메시지 처리후의 동작입니다. 짧지만 제일 중요한 부분입니다.


OnCommand는 클래스마법사에서 가상함수로 만들 수 있습니다.

OnUpdateData는 직접 작성하시면 됩니다.



위와 같은 함수를 만들어 줍시다.

Delay는 말 그대로 버튼을 누르고 있는동안 딜레이를 주기위한 함수입니다. 이부분은 가져온 부분이라서 관심있으신 분은 스스로 찾아보셔야 하겠습니다.


MyThread는 버튼을 누른동안 Thread로써 기능할 함수입니다. 여기서 pClass는 Dlg클래스가 되겠습니다. 저 두 함수위에 bool threadFlag = false로 변수를 하나 만들어 주었습니다. 버튼을 누른동안 true가 될것이고 떼었을 때 false로 전환될것입니다. 딜레이를 주면서 매 루프마다 변수를 1씩 늘려줍니다.



여기서 PostMessageW는 잠시 보류하고 대신 UpdateData(FALSE); 구문을 넣어줍시다.


그 아래 PostMessageW(THREAD_UPDATE)가 중요합니다.


주의할 것은 두 함수 다 클래스 밖에 있는 전역함수라는 것입니다.Thread는 클래스 밖에서 동작하고 있습니다.


5.

Thread를 동작시켜 봅시다.

OnCommand의 내용입니다. DestroyThread는 아직 놔둡시다. 다른 파일로 해서 클래스명이 약간 다릅니다. 조심해 주세요.

서브클래스로부터 받은 값에 따라 동작하게 하였습니다.

여기서 중요한 구문은 CountingThread = AfxBeginThread(MyThread,this) 입니다.

AfxBeginThread에 대해서 조사바랍니다. MFC에서 사용하는 Thread관련 함수이며 대상 함수가 정적함수여야 인수로 받을 수 있습니다.


만들어진 소프트를 실행시켜 봅시다. 에러가 발생합니다. UpdateData함수는 메인 클래스 밖의 함수에서 사용할 수 없습니다. 우선은 MyThread의 UpdateData구문을 지워줍시다. 그러면 값의 갱신이 실시간으로는 보이지 않지만 갱신되고 있음을 알 수 있습니다.

꾹~ 누르는 동안은 아무변화 없다가 버튼을 떼면 값이 갱신됩니다.


6.

클래스 밖에서 UpdateData구문을 실행할 수 없기 때문에 메시지를 보내 실행하게 해야  합니다.


Dlg의 헤더파일에 아래와 같은 구문을 넣습니다.


클래스 내에 아래 구문을 추가합니다.


public:

LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);


OnUpdateData : 메시지 처리후의 동작입니다. 짧지만 제일 중요한 부분입니다.

OnUpdateData는 직접 작성하시면 됩니다.


Dlg의 cpp의 메시지맵에 ON_MESSAGE구문을 넣습니다.


Dlg의 cpp에 아래 함수를 추가합니다.




위 MyThread 함수에 있는 PostMessageW 를 활성화 시킵시다.

실시간으로 업데이트되는 것을 확인할 수 있습니다.

'Software > Programming' 카테고리의 다른 글

volatile(C,C++)  (0) 2016.04.15
구조체와 공용체. 공용체의 패딩  (0) 2015.01.11
비트필드(Bit Field)  (0) 2014.08.11
[비선형 자료구조]트리.그래프 (AVL 트리)  (1) 2013.05.25
전위표기. 후위표기  (0) 2013.05.25
Posted by 십자성군