PROGRAMMING WORKSHOP

Android|
xml화일로 만든 인터페이스 없이 Java코드로만 Activity 화면을 만들어 보자

인터페이스를 일일이 그려가면서 하려니..프로그래밍하는 재미가 안난다
앞페이지에서 한 내용은



xml화일 없이 java 크래스모듈로만 만들어 보도록 하자..
앞으로 주로 그렇게 진행하도록 한다
그래야 코딩하는 재미가 있다
물론 코딩하기 귀찮은 부분은 xml로 처리한후 xml화일을 위와 같이 불러와도 된다
xml문을 작성하느니 코딩하는 것이 편하게 될 것이다
그러다가, xml적당히 코딩 적당히 상황에 따라서 섞어가면서 하면 된다
아무튼 프로그래밍은 재미있는 것..

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
    }

 }

위와 같은 상태는 완전히 빈탕이다 아무것도 안 된다
아래와 같이 onCreate 메소드의 내용을 추가해 보자

public class MainActivity extends Activity { 

	LinearLayout layout;
    Button button1;
    Button button2;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
		
       
        layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL); 
        button1 = new Button(this);
        button1.setText("Button A");
        button2 = new Button(this);
        button2.setText("Button B");
        layout.addView(button1);
        layout.addView(button2);
		
        setContentView(layout);
    }

 }

위의 내용을 그림으로 보면 아래와 같다



버튼 2개 생성하고 Layout 1개 생성하고
각각의 속성을 처리하고
버튼 2개를 Layout에 담고
Layout을 최종적으로 Activity개체의 최상위 개체로 넣는다
그러면 xml화일에서 표현했던 내용이 RunTime으로 만들어진다
편리하고, 흥미로운 것이다

최종적 상위개체를 넣는 메소드인
setConentView()에서 매개변수를 xml화일로 만든 것을 전달할수도 있고
위와 같이 RunTime으로 생성된 개체를 전달할수 있다는 것이 요점이다

setContentView메소드의 개체는 물론 Activity개체를 말하는 것
Activity.setContentView인 것이고, Activity 부분은 생략해도 되는 것이고..

java에서 변수선언은 항상 타입을 앞에 표현한다고 했었다..
아직 낯섫어서 좀 헷갈리지만 조금 지나면 인간의 두뇌는 우수하여 금방 길들여진다
VBA에서
Dim oBtn As Button
와 같이 선언하는 것을 Java에서는
Button oBtn;
으로 자판때리는 횟수가 적다
첫번째 줄
LinearLayout layout; 은 xml문에서 최상위 노드 LinearLayout..이름은 xml에서의 이름과 같다
LinearLayout 타입 변수 layout을 선언하고
layout = new LinearLayout(this);
라고 개체를 만들어 넣는다
이것을 실은 아래와 같이 해도 된다
LinearLayout layout=new LinearLayout(this)
라고 한 줄로 표현해도 된다

위의 코드에 추가하여 버튼에 지능을 심어주면 된다
앞페이지에서 지능을 심어주는(즉 이벤트메소드를 만들어주기)작업을
상기하면서 추가시켜보아도 좋을 것이다, 복습인 셈이니까!!

package com.uno.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;


public class MainActivity extends Activity {
        LinearLayout layout;
        Button button1;
        Button button2;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL); 
        button1 = new Button(this);
        button1.setText("Button A");
        button2 = new Button(this);
        button2.setText("Button B");
        layout.addView(button1);
        layout.addView(button2);

        setContentView(layout);
        
        
        button1.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				layout.setOrientation(LinearLayout.HORIZONTAL);
				ViewGroup.LayoutParams params = button1.getLayoutParams();    
				params.width=layout.getWidth()/2;    
				button1.setLayoutParams(params);
				ViewGroup.LayoutParams params1= button2.getLayoutParams();
				params1.width=layout.getWidth()/2;
				button2.setLayoutParams(params1);
				layout.setBackgroundColor(Color.BLUE);
				Toast.makeText(getApplicationContext(), "layout.setOrientation(LinearLayout.HORIZONTAL)",Toast.LENGTH_SHORT).show();
				
				}
		});
        
        button2.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				layout.setOrientation(LinearLayout.VERTICAL);
				layout.setBackgroundColor(Color.RED);
				Toast.makeText(getApplicationContext(), "layout.setOrientation(LinearLayout.VERTICAL)",Toast.LENGTH_SHORT).show();
			}
		});
     }

}

위의 내용을 그대로 복사하여 옮기고 실행해 보시기를..



만들어 놓은 버튼 A를 크릭하였을때와
버튼 B를 크릭하였을때의 변화시키고 싶은대로 변화를 줄수 있을 것이다
LinearLayout개체는 속성 Orientation이 있다
이것을 수직방향(Vertical) 혹은 수평방향(Horiznotal)로 값을 바꿀수 있다
여기에서도 속성을 변경시키는 것을 VB와는 다르게..
setOrientation()이라는 메소드를 사용하여 속성을 바꾼다

버튼의 폭(Width)를 LinearLayout폭의 반으로 하고 싶을때
약간 복잡하지만 이유있는 복잡함이다

ViewGroup.LayoutParams params = button1.getLayoutParams();
params.width=layout.getWidth()/2;
button1.setLayoutParams(params);

버튼의 다양한 성질머리(속성들)을 하나의 개체에서 관리하고 있는 것이다
그 개체는 LayoutParams 라고 하는 것이고 이것을
해당버튼의 getLayoutParams()로 얻어서
이 집합적으로 정보를 갖고 있는 개체의 Width속성값을
Layout.getWidth()....즉 현재 LinearLayout개체의 폭의 값을 얻어오고
이것을 반으로 나누어서 params개체의 width속성값으로 준후
params개체자체를 해당버튼의 setLayoutParams(..)메소드에
전달하면 해당개체(여기에서는 버튼)의 성질머리를 바꿀수 있는 것
또 LinearLayout개체의 바탕색은 setBackgroundColor()메소드로
바꿔주고...
그리고 각각 버튼의 크릭에서 Toast 메시지 박스를 띄워줘보고..
이렇게 프로그래밍적으로 개체들을 만들고 성질을 바꾸고 할 수 있다는 것을
아시고...이렇게 실행해 본 화일은 Bin/Res 디렉토리에
apk라는 확장자의 화일이 배포할수 있는 화일이 된다
apk화일을 마켓에 내놓고 팔아도 되고 그냥 화일로 배포해도 되고..
apk화일을 안드로이폰폴더에 넣고 실행시키면 설치된다
싱거운 프로그램이던 가치있는 것이더 apk화일은 실행화일이다



***[LOG-IN]***