개발모음집

[안드로이드 프로그래밍] Day04 본문

Android

[안드로이드 프로그래밍] Day04

void 2016. 6. 3. 15:17

*에러 발생시 해결하는 3가지 방법


1.  재빌드

Sync Project with Gradle Files버튼 누르기

실제 바뀐 소스를 인식못하여 에러가 생길때 누르는 버튼

동그라미에 아래화살표가 있는 모양


2. Build - Clean Project 누르기


3. 빌드삭제

빌드된 것이 남아있어 에러인 경우도 있다.

Project Files - app - app -build 에서 build폴더를 삭제해주자



* 안드로이드 스튜디오 줄표시 세팅

File-Settings- Editor - General - Appearance - show line number



*안드로이드 스튜디오 API를 바로 확인하는 법

내가 보고 싶은 클래스, 인터페이스위에서 CTRL+Q



* 오버라이드


메인 클래스안에서 오른쪽버튼클릭 - Generate - Override Methods(CTRL+O)에서 

재정의하고 싶은 메소드를 누르면 자동으로 소스작성이 됨


* 액티비티 쉽게 찾기

Find in Path (Edit - Find - Find in Path(CTRL+SHIFT+F)

Text to find에 Activity를 넣고 검색


* Rendering Problems Exception raised during rendering

API 버전을 바꾸면 해결된다.

껐다가 키면 해결된다는 글도 봤는데, 나한테는 적용이 안되는 듯

우선 이렇게 해결하고, 렌더링문제가 생긴 API에서 해결하는 방법을 알게되면 게시해야겠다. 



* 정렬

layout:gravity와 gravity는 차이있다.

gravity는 글자를 정렬


여유공간이 없다면 움직이지않는다.

 

* weight 분할 할당정도

layout_width, layout_height 둘 다 기본적으로 있어야하는 값 


버튼1,2의 layout:wegiht를 1로 지정하면 1:1로 화면을 나눠가짐


* 앱이 비정상 종료되면

Android DDMS - logcat에서 에러를 확인할 수 있다.




test.java 파일


package org.androidtown.test;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //setContentView를 버튼찾기전에 선언해야한다. 그래야 메인액티비티에 있던 걸 찾을 수 있다.

Button button2 = (Button) findViewById(R.id.button2); //메모리에 할당: inflation
button2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "중지버튼이눌림", Toast.LENGTH_LONG).show();
}
});

}

public void onButton1Clicked(View V){
Toast.makeText(getApplicationContext(), "시작버튼이눌림", Toast.LENGTH_LONG).show();
}
}

/java -> 자바소스파일이 들어있는 폴더

/res -> 리소스 파일이 들어있는 폴더

/build -> 개발환경이 자동으로 만들어 내는 소스 파일

/assets -> 처음에는 생성x, 처리하는 파일들을 저장함

AndroidMnifest.xml -> 앱에 대한 정보를 담고 있는 파일 (구성요소, 권한등)

 

작성한 소스코드+xml로 정의한 리소스파일 + 매니페스트--->

gradle를 통한 빌드--->.apk


프로젝트 구성단계(안드로이드스튜디오라는 개발환경, 안드로이드SDK사용)

---> XML레이아웃생성 + 자바코드 구성+매니페스트파일 편집: 프로젝트의 소스파일 ---> javac 컴파일러를 통해 클래스파일로 컴파일(자동으로 R.java파일 참조, 개발도구중의 하나인 dx를 이용해 dex파일로 만들어지고 리소스 파일들은 필요한 경우 바이너리 파일로 빌드) --aapt라는 개발도구(개발단계: 인증을 위한 서명이 필요하지 않아 unsigned, 플레이스토어올릴때는 jarsigner를 이용해 signed상태로)-->.apk

 

소스파일에 에러가 없는데도 에러가 생길 수 있음

gradle의 설정 때문에 빌드가 되지 않는 경우가 있다.

app/build.gradle파일의 설정 때문이다.

 

build.gradle 주요 정보들

compileSdkVersion -> 컴파일시에 사용할 SDK 버전을 지정한다.

buildToolsVersion -> 빌드 도구의 버전을 지정한다.(SDK매니저에 설치한 Tools항목중 Android SDK Build-tools 모듈의 버전과 일치해야한다.

minSdkVerision -> 프로젝트가 지원하는 최소 SDK 버전을 지정한다.

targetSdkVersion -> 실행 시 기준이 되는 SDK 버전을 지정한다.

...appcomat... -> 예전 단말들을 지원하기 위해 보완한 클래스들이 들어있는 appcompat모듈의 버전을 지정 


둘째마당

 

액티비티: 안드로이드에서 화면을 지칭함

레이아웃: 화면에서 어떻게 배치되어 보일 것인지를 결정하는 것

: 일반적으로 컨트롤이나 위젯이라는 이름으로 불리는 UI 구성 요소라고 할 수 있습니다.

뷰 그룹: 뷰들을 여러 개 포함하고 있는 것

위젯: 뷰 중에서 일반적인 컨트롤의 역할을 하고 있는 것

레이아웃: 뷰그룹중에서 내부에 뷰를 포함하고 있으면서 그것들을 배치하는 역할

 

대표적인 뷰의 속성

layout_width, layout_height 뷰의 폭과 높이를 설정합니다.

: math_paraent 부모크기, wrap_content flowlayout같은 것, 정수(px, dp or dip, sp or sip(텍스트크기표시), in, mm, em(텍스트크기표시))

id 뷰의 id를 지정합니다.

background 뷰의 배경을 설정합니다.

 

자주쓰이는 크기단위: dp(단말의 해상도에 따라 비율로 픽셀값이 계산됨)

 

XML 레이아웃에 정의된 뷰들은 애플리케이션이 시작될 때 메모리에 객체로 만들어진다.

프로젝트 파일이 빌드될 때 XML레이아웃에 정의된 정보는 내부적으로 자바 코드에서 new 연산자로 객체를 만드는 것처럼 동일하게 객체를 만들게 된다. 이렇게 객체로 만드는 객체화과정을 인플레이션이라고 한다. 자바코드에서는 메모리의 어느 위치에 객체가 만들어져 있는지 알 수 없으므로 id를 지정한 후 이 id를 이용해 자바 코드에서 객체를 찾아낸다. (포인터같은 개념)

자바코드상에서 R.id.[ID]와 같이 참조, XML레이아웃에서는 ‘@+id/..' or ‘@id/..'로 사용

ex)

자바코드 -> Button button1 = (Button) findViewById(R.id.button01);

XML레이아웃 -> android:id="@+id/button01"

 

액티비티에 정의된 setContentView() 메소드는 XML 레이아웃에 정의된 뷰들을 메모리상에 객체화하는 역할

 

setContentView을 이용해 설정한

xml레이아웃안의 버튼을 

찾아내는 방법

 

helloNewActivity.java 파일

public void onButton1Clicked(View v){

    setContentView(R.layout.activity_new);

    Button button1 = (Button) findViewById(R.id.button01);

}

 

 

//setOnClickListener: 간단한 메시지를 보여주고 싶을 때 이용하는 이벤트

button.setOnClickListener(new OnclickListener()){

    public void onClick(View v){

        Toast.makeText(getApplicationContext(), "버튼클릭됨",         Toast.LENGTH_LONG).show()

    }

});

 

프로젝트 생성시 자동으로 만들어졌던

xml 레이아웃에 버튼을 넣은 후 그 버튼을 찾아내는 방법


NewActivity.java 파일

public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_new);

}

Button button2 = (Button) findViewById(R.id.button02);

button.setOnClickListener(new OnclickListener()){

    public void onClick(View v){

        Toast.makeText(getApplicationContext(), "버튼클릭됨",         Toast.LENGTH_LONG).show();

        setContentView(R.layout.table_layout);

    }

});

Background format

#RGB

#ARGB

#RRGGBB

#AARRGGBB


배경으로 이미지지정

background속성에 이미지 리소스의 위치를 값으로 설정

예로 tiger.jpg

안드로이드 이미지 리소스는 [/res/drawable]안에 들어간다.

실제 tiger.jpgapp/src/main/res/drawable에 위치시킨 후 xml레이아웃파일에 들어있는 뷰의 속성으로 android:background="@drawable/tiger"와 같이 지정