1. 이클립스 다운로드

 

이클립스 사이트에 접속하여 버전에 맞는 이클립스를 다운받는다.

(http://www.eclipse.org)

 

2. 이클립스에 안드로이드 ADT 설치하기.

 

다운받은 이클립스를 압축해제하고 실행시킨다.

 

실행후 Help -> Install New Software...를 눌러 아래와 같은 창을 띄운후

주소창에 ( https://dl-ssl.google.com/android/eclipse/ )를 입력후 아래의 항목들을

설치한다.

 

 

 

 

다음문구가 뜨면 설치가 완료된 것이다. 재부팅을 한다.

 

 

 

 

3. 안드로이드 SDK 설치하기.

 

설치후 재실행을 하게되면 상단 매뉴에 아이콘을 눌러준다.

 

 

위와 같은 창이 뜨면 원하는 버전의 SDK를 선택한 Install package를 눌러 준다.

위와 같은 창이 뜨면 모두 동의를 눌러주고 Install을 눌러 설치한다.

4. 안드로이드 샘플 프로젝트 실행하기

프로젝트를 새로만들어본다 오른쪽클릭후 Project -> New Android Application을 선택해준다.

 

이름은 Test로 선택후 생성한다.

 

위와 같은 창이 생기면 버튼을 눌러준다.

위에 창에서 New를 눌러 새로운 가상기기를 만든다.

 

왼쪽과 같이 기본설정으로 만든다.

저는 안드로이드 4.1 버전으로 생성했습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

안드로이드 Test 파일을 컴파일 한다.

위와같이 처음에는 안드로이드 가상머신이 부팅되는 화면을 있다.

부팅이 완료 되면 위와같이 만들어진 어플을 가상머신으로 확인 있다.

 



구글맵을 띄울 엑티비티는 Activity를 상속 받는것이 아니라 MapActivity를 상속 받습니다.


그리고 인터페이스를 하나 구현해 줍니다.


public class 클래스명 extends MapActivity implements LocationListener {

...


Location을 구현하기 위해서는 4개의 메소드가 필요하다.


 

public void onLocationChanged(Location location) {}

// 위치값이 변경될 시 , 지역변수는 위치 값을 말한다.

public void onProviderDisabled(String provider) {}

// 위치 제공이 안될 시

public void onProviderEnabled(String provider) {}

// 위치 제공이 가능한 경우

public void onStatusChanged(String provider, int status, Bundle extras) {}

// 상태가 변경되었을 시 ( ex. gps->3g )



이 내용물들을 잘 골라가며 그때 그때 맞추어 사용하면 된다.


가장 많이 사용하는 것이 onLocationChanged() 일텐데, 이것을 관리하기 위해 LocationManager 을 선언과 생성을 해줍니다.



  

public class Test_Activity extends MapActivity implements LocationListener {

  LocationManager locManager; // 선언

  @Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.test);



locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 생성

// GPS 사용시 

//locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000, 0, this);

// 3G,4G,WIFI 사용시

// locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);

}

}

이런식으로 지정해주시면 됩니다.

requestLocationUpdates(GPS,네트워크 방식지정 , 시간(ms) , 거리(m) , 객체리스너) 로 이루어져 있고

이 설정에 따라서  onLocationChanged() 이 작동하기 때문에 이 설정을 잘 이해해주시는게 좋습니다.

안드로이드 어플개발시 구글맵 띄우기


xml에 구글맵을 띄우기 위해선 일단 구글맵키를 받아야 한다


  


이런식으로 구글맵이 생성이 되는데 

api키를 받아주어야 사용이 가능하다


운영체제 마다다른데 리눅스, 윈도우만 설명을 하면


우선 리눅스는(Centos)

Eclipse에서 

Window -> Preference -> Build -> “default debug keystore”에 저장된 경로를 확인합니다.

특별하지 않을경우 계정홈 .android/debug.keystore 로 지정이 되어있습니다.


그럼 터미널로 들어가서

# keytool -list -alias androiddebugkey  -keystore .android/debug.keystore -storepass android -keypass android 

를 입력해주면 키값이 뜹니다.



이 MD5의 값을 기억하고 계시고요


윈도우는 cmd로 명령프롬프트를 실행해주신뒤에 로그인한계정 .android 로 들어갑니다.

그 위치에서 dir *.keystore로 keystore가 있는지 확인하시고 있으면

위와 똑같이  

> keytool -list -keystore debug.keystore -keypass android -storepass android -alias androiddebugkey

를 입력해주세요

아래와 같은 경우처럼 안되는경우는 path등록을 안해주셨을 경우이기에 path를 등록해주시면 됩니다.




md5 값을 기억하시고

https://developers.google.com/android/maps-api-signup?hl=ko-KR

요기로 들어갑니다.


MD5 키입력란에 키를 입력하시고 확인을 눌러주시면


위와같이 사용자키가 생성됩니다


이키를 위 소스에 apikey안에 입력해주시고 실행하시면



이건 제가만드는중인 어플이라 조금 다를수가 있습니다.


이런식으로 지도가 띄워지게 됩니다.

다음에는 자기위치를 띄우는법을 쓰도록하겠습니다... 시간이 되면


/* 웹에서 파일 다운로드하기 * Stream을 이용하여 웹에서 파일을 다운로드하고 * 어플 내의 data공간에 파일을 저장한다. * db등의 파일을 다운로드할때 유용하다. */

File outfile = new File("/data/data/어플패키지명/databases/다운받을 파일명");

InputStream is = new BufferedInputStream(new URL("FileUrl").openStream());

OutputStream fo = new BufferedOutputStream(new FileOutputStream(outfile)); int read = 0; byte[] buffer = new byte[1024]; while ((read = is.read(buffer, 0, 1024)) != -1) fo.write(buffer, 0, read); fo.flush(); fo.close(); is.close();

위 소스 기반으로 파일을 다운을 받고 DDMS로 확인을 하면


다운로드 전


다운로드 후


이런식으로 파일이 변한것을 확인할 수 있습니다.


우선 유투브 동영상에서 ID주소를 가져옵니다


아이디주소는 


네모 친부분이 아이디입니다 기억해주세요


그리고 원하는 이벤트안에 아래 문구를 넣어줍니다


Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("vud.youtube:YOUTUBEID)); 
startActivity(i);

굵은 글씨공간에 적어주면됩니다.


그럼 내가 특정이벤트를 실행시 원하는 동영상을 Youtube 내장앱을 이용해 감상하실 수 있습니다.


꼭 내장유투브 뿐만아니라 인터넷으로도 부르고 싶다. 즉 어떤걸 선택할지 사용자가 정하도록 하고싶은경우


Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watch?v=YOUTUBEID")); 
startActivity(i);

이런식으로 사용하면 됩니다.


Centos가 날라가서 다시 설치하고 세팅하는대

루트권한으로 들어가도 DDMS에 겔넥이 인식이 안되더군요.


구글신의 도움으로 글 써봅니다.


1. # lsusb 로 내폰을 찾아본다.


제폰이 왜 갤스2로 나오는지는 모르겠지만 여기서 알아두셔야할건 "ID 04e8:6860" 입니다.


2. # vi /etc/udev/rules.d/99-android.rules 로 파일을 만들어 아래내용과 같이 적어줍니다.



이때 "ID 04e8:6860" 이 ATTRS{idVendor}="아이디앞부분" , ATTRS{idProduct}="아이디뒷부분" 로 들어가 줘야합니다.


그리고 재부팅후 이클립스를 켜서 확인합니다.



야호 신난다. 이제 즐거운 개발을 해봐요...

카카오톡 처음화면보면 카카오톡 이뜬다음 몇초뒤에 본화면이 뜨게되어있는대


책을봐도없고 도저히 뭐로 검색해야할지 몰라서


"아 인텐트는 알고 시간은 쓰래드로 돌릴까? 근대 안드로이드는 주어진게 많아서 있을꺼같아!"


하고 찾아보니 카운트 다운 을 알게되어서 쓰게되었습니다.


우선 2개의 xml을 만들어서 하나는 이미지버튼으로 구현한 로고


다른하나는 초기메인화면을 출력하는 파일을 만듭니다


여기서는 로고를 띄우는 ProjectActivity

/  초기화면은 MenuActivity 로 생성했습니다.


그럼 화면을 넘기는 2가지이벤트


1. 카운트다운을 이용한 시간이지나면 이동하도록


2. 이미지버튼으로 눌렀을 경우 이동하도록


에 대해 써보겠습니다


  
CountDownTimer cdt = null;
cdt = new CountDownTimer(3500, 3500){
	@Override
	public void onFinish() {
		// TODO Auto-generated method stub
		Intent i = new Intent(ProjectActivity.this , MenuActivity.class);
		finish();
		startActivity(i);
		this.cancel();
	}

	@Override
	public void onTick(long millisUntilFinished) {
		
	}
	
}.start(); 


카운트다운을 먼저 선언하고 생성시에 매개변수로 (총카운트할 시간 , onTick를 반복할 주기시간)

을 적어줍니다. 우리는 한번만 반복할꺼기 때문에 3.5초후 화면이 넘어가도록 하고


인텐트로 메뉴로 이동하도록 하면 이동하게 됩니다


주의할점은 인텐트로 액티비티 호출후

ProjectActivity.this.finish();

를 이용하여 로고가 보이는 액티비티를 죽이지않으면 뒤로가기 했을경우에 다시로고가뜨는경우를

보실수있습니다..


  
ImageButton btnCall = (ImageButton) findViewById(R.id.startButton);

btnCall.setOnClickListener(new Button.OnClickListener(){
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Intent i = new Intent(ProjectActivity.this , MenuActivity.class);
		finish();
		startActivity(i);
	}
});



btnCall 이란 이미지버튼을 눌렀을때 화면이 넘어가도록 설정해보겠습니다

OnClickListener로 이벤트를 받아서 마찬가지로 액티비티를 넘겨주는 방식으로 사용하면 됩니다.


우리모두 어플 이쁘게 만들어보아요



릴렉티브 레이아웃은 꼬리물기 레이아웃입니다


A옆에 B , B아래 C 이런식으로 정렬하게 됩니다. 


우선 정렬속성을 보시면



속성 설명
layout_above ~의 위에 배치
layout_below ~의 아래에 배치
layout_toLeftOf ~의 왼쪽에 배치
layout_toRightOf ~의 오른쪽에 배치
layout_alignLeft ~와 왼쪽변 정렬
layout_alignTop ~와 위쪽 변 정렬
layout_alignRight ~와 우측변 정렬
layout_alignBottom ~와 아래쪽 변 정렬
layout_alignParentLeft true이면 부모와 왼쪽변 정렬
layout_alignParentTop true이면 부모와 위쪽변 정렬
layout_alignParentRight true이면 부모와 오른쪽변 정렬
layout_alignParentBottom true이면 부모와 아래쪽변 정렬
layout_alignBaseline ~와 베이스라인을 맞춘다
layout_alignWithParentIfMissing layout_toLeftOf 등의 속성에 대한 앵커가 발견되지 않으면 부모를 앵커로 사용한다
layout_centerHorizontal true이면 부모의 수평 중앙에 배치한다.
layout_centerVertical true이면 부모의 수직 중앙에 배치한다.
layout_centerInParent true이면 부모의 수평, 수직 중앙에 배치한다.

식으로 ~옆에  /~와 라인을 맞춤 / ~의 ~변에 라인을 맞춤 식으로 부모뷰 옆에 자식뷰를 배치 하는 방식으로 생각하시면 됩니다.

p52.jpg 

이런식으로 B를 부모 A를 자식이라고 생각했을 때

A옆에 B를 위치하여 찍는다. 라고 생각하시면 됩니다.



  
  
  	
  	


위코드를 보면서 무엇옆에 무엇이있는지 생각을하시고 아래그림을 보시면 되겠습니다.

 

오늘은 테이블 레이아웃을 구현해 보겠습니다.


우선 테이블 레이아웃은 표 형식으로 구현되는 레이아웃으로 

<TableRow ></ TableRow > 마다 행이 지정되고그안에 들어가는 요소별로 열이 지정됩니다.
01.<tablelayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent" android:layout_height="fill_parent">
02.<tablerow>
03.<textview android:text="국어" android:textsize="15pt" android:padding="10px">
04.<textview android:text="영어" android:textsize="15pt" android:padding="10px">
05.<textview android:text="수학" android:textsize="15pt" android:padding="10px">
06.</textview></textview></textview></tablerow>
07.<tablerow>
08.<textview android:text="88" android:textsize="15pt" android:padding="10px">
09.<textview android:text="92" android:textsize="15pt" android:padding="10px">
10.<textview android:text="76" android:textsize="15pt" android:padding="10px">
11.</textview></textview></textview></tablerow>
12.</tablelayout>



위 코드를 보면 처음 행안에 국 영 수 라는 TextView 값이 들어가 있고


다음행에는 점수 값이 TextView로 들어가 있습니다.



그래서 결과적인 출력화면으로


 


이런식의 화면을 보실 수 있습니다.


테이블레이아웃 자체는 너무간단하고 앞에서 레이아웃속성을 설명해서 이정도 설명해도 이해하시리라 생각됩니다.

안녕하세요 김구조 입니다.

한다한다 하다가 드디어 안드로이드 들어왔내요.

저만 그런지모르겠지만 GUI개념은 좀어려워요 안써버릇한 개념이여서 그런지는 모르겠지만...

하다보면 이해되니까 저같은 분들도 많은 도움 얻어가시길 바래요.

틀린내용이나 궁금하신점은 댓글로 피드백 주시면 감사하겠습니다



레이아웃의 종류

1. 리니어 레이아웃

 - 차일드뷰(요소)를 일렬로 배치하여 차곡차곡쌓아 정렬하는 방식으로 가장 많이쓰이고 책에서도 처음에 나오는 방식.

2. 프레임 레이아웃

 - 차일드를 배치하는 기준이 없고, 모든차일드는 프레임 최산단에 나타나게됨, 그래서 막넣게되면 덮어씌워짐으로 주의하여야함!

3. 렐리티브 레이아웃 ( 상대적인 레이아웃 )

  - 위젯과 위젯 사이에 규칙을 정해 배치하는 레이아웃 (ex. Textview 오른쪽에 Button을 넣기)

대표적으로 3가지를 사용하고

오늘은 리니어 레이아웃에 대해 알아보겠습니다. 



1. 정렬하기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    >

</LinearLayout>

<LinearLayout android:baselineAligned="true"> 

리니어 레이아웃 기본설정중에 가장중요한 3가지이다

layout_width와 height 는 각각의 크기를 지정할 수 있는대

fill_parent로 전부 채우거나 wrap_content로 내용물의 크기를 지정할 수 있다.

orientation은 가로로 채울것인지 세로로 채울것인지 정하는 요소이며

horizontal은 가로로 , vertical은 세로로 채운다 


 vertical horizontal 

 


2. gravity속성 정렬 하기

중력이란뜻인데.. 게임이생각나는 용어내요 

내용물을 어느쪽에 배치할 것인가를 gravity속성으로 지정하게됩니다. 수평 수직방향에 대한 정렬방식을 지정할수 있습니다

TextView를 사용할 경우에는

<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="구조구조의 구조구조한 코딩"
android:textSize="30px"
android:textColor="#ffffff"
android:gravity="center|right" 
/>

이런식으로 center|right 로 설정하게되면


이런식으로 세로로 가운대 가로로 오른쪽 정렬이 이루어 지게 됩니다.

요소는 아래 표를 보고 참고하시고요




3 베이스 정렬
 

높이가 다른 차일드 뷰를 수평으로 나랑히 배치할때 사용하며, 바닥에 붙혀 정렬한다. 

크기가다른 요소들을 붙혀서 사용할 때 용이하다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:baselineAligned="true" > <!-- false로 할경우 정렬이 안된다. -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="김구조의 "
        android:textSize="10pt"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="구조구조한 "
        android:textSize="5pt"
        android:background="#0000ff"
        />
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="블로그 "
        android:textSize="20pt"
        android:typeface="serif"
        />

</LinearLayout>  


마진과 패딩

레이아웃에 요소가 다닥다닥 붙어있으면 안이쁘고 손으로 누를때 오작동의 가능성이 있기 때문에 여백을 띄워주어 잘정돈할 수 있다.

 

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="구조구조해!"
        />
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="#00ff00"
        android:padding="15px"
     android:layout_margin="15px">
    <Button 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="구조구조해!!"
        />
    </LinearLayout>
    

</LinearLayout>

마진과 여백을 보여주기위해 안에 리니어 레이아웃을 하나 더 넣어서 표현해 보았다.

여기서 녹색부분 태두리와 액티비티 끝부분과 떨어져있는 걸 볼수있는대 저것을 마진이라하고

녹색부분이 버튼과 떨어진 패딩이다. 다른 그림으로 보면

  
다음그림과 같이 볼수 있다. 필요에 따라 패딩이나 마진으로 여백을 주어 표현이 가능하고, 저것을 얼마나 응용하나에 따라서 이쁜어플이 될 수 있으리라 생각한다.


안드로이드 첫글인데, 코드 수정하고 올리고 좀 이쁘게하려고했는대 생각처럼안되고 힘드내요.

리플하나 꼭 받아보고 싶은대 부족하거나 문제있으면 피드백 부탁드립니다.

그래야 제가 더 공부를 ㅠㅠ

 

+ Recent posts