'view 만들기'에 해당되는 글 1건

  1. 2013.02.13 xml없이 java로 android view 만들기

<script type="text/javascript"><!--
google_ad_client = "ca-pub-1261983873465389";
/* 글 제일 위에 */
google_ad_slot = "2059623354";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

이번에 안드로이드 스터디를 진행하면서, 과제가 주어졌다. " 모든 작업은 JAVA로만 구현해오세요. "
어차피 대부분 기능은 자바로 구현되니 쉽게 찾아보면서 할수있겠지.... 했는데, 아무리 서적을 뒤져봐도 JAVA 만을 이용한 안드로이드 코드방식에 대해 설명한 책은 없었다.
일부 책에서 약간의 언급을 해줬지만, 순수 JAVA 코드로만 짜는 것은 아주 간단한 프로그램만들때만 쓸 뿐, 큰 프로젝트를 진행하게 되면, 비효율적인 부분들이 많아서 쓰지 않는다. 라고 마무리 짓고 더이상의 설명은 찾아볼수가 없었다.
혹시나 저처럼 자료를 찾아다니는 분들이 있을까하여, 혼자서 구글링을 하며 배운 내용을 짧게나마 포스팅 남겨둡니다.


[ 안드로이드 최초 생성시 Activity_main.xml 의 구성 ]

[위의 Activity_main.xml 코드를 Java로 바꿨을 때 ]

처음보면 왜 서적에서 쓰지말라고하는지, 이해가 갈수도...

그런데 막상 알고보면 별거 없습니다. 천천히 살펴보죠.

RelativeLayout rlRelativeLayout = new RelativeLayout(ctCtex);
xml에서 최초 <RelativeLayout... 으로 설정하고 코드 작성을 시작합니다.
마찬가지로 java 코드에서도 RelativeLayout 을 할당해서 컨텍스트(Context)를 연결해줍니다.



RelativeLayout.LayoutParams lpRelativeLayout_Property = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);

다음 레이아웃의 속성을 지정해주기 위해, RelativeLayout.LayoutParams 를 사용합니다.
(LinearLayout 을 사용해서 만들었다면. LinearLayout .LayoutParams :: 해당 레이아웃에 맞는 Params를 가져옵니다. )
xml에서 android:layout_width / heigth 를 지정해주는 것처럼 RelativeLayout.LayoutParams 에서 인자로 넓이 / 높이 를 받게 됩니다.


[ 이해 하시리라 믿겠습니다 . . . ㅡ 3 - ]


rlRelativeLayout.setLayoutParams( lpRelativeLayout_Property )
중요! 레이아웃 설정만 해서 끝나는것이 아닙니다. 속성 지정이 끝나면, setLayoutParams 를 이용하여, 설정값을 세팅한 변수를 입력해서, 세팅하고자하는 레이아웃에게 넘겨줘야됩니다.


이제 RelativeLayout 의 크기 설정이 끝났다.
다음 Layout 안에 들어갈 뷰를 생성해보자.

TextView tvText = new TextView(ctCtex);
위에 설명한 레이아웃 생성방식과 동일합니다. new 를 통해서 객체 생성과 동시에 인자로 컨텍스트를 넘겨줍니다.


RelativeLayout.LayoutParams lptvText_Property = new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
lptvText_Property.addRule(RelativeLayout.CENTER_VERTICAL);
lptvText_Property.addRule(RelativeLayout.CENTER_HORIZONTAL);

마찬가지로 레이아웃에서 설정하던 방식과 동일합니다. 눈여겨 볼점은 addRule 이라는 함수부분 입니다.

[Reference ]
.addRule(int verb); or .addRule(int verb, int anchor);

기본적으로 LayoutParams의 인자로 바로 설정 가능한 값은 w / h (Width 와 Height) 값 밖에 없습니다.
xml에서 android:layout_centerHorizontal 과 같이 부가적인 설정 변경은 addRule을 통해 이뤄지게 됩니다.


addRule 을 이용한 설정 몇가지만 간략하게 설명해뒀으니 참고하시길...

더보기



tvText.setText(R.string.hello_world);
텍스트 뷰에 텍스트를 입력하는 부분입니다.
인자로 텍스트 저장 부분의 id 를 넘겨줘도 되고, 아래 처럼 직접 써줘도 됩니다.
위 코드에서는 xml과 똑같이 비교하기 위해 아이디를 연결해줬습니다. XML 코드없이 만들기 위해선 직접 입력해줘야겠죠??

tvText.setText("Hello World"); 문자열을 직접 입력해서 넣어줘도 됨.





rlRelativeLayout.addView(tvText);
텍스트 아까전에 속성을 추가해주는 setLayoutParams 처럼 역시 중요한 부분입니다.
사실 간단하면서 당연한부분인데, 중요하다고 하는 점은 쉽게 지나칠수 있다는 점 때문입니다.
xml 에선 < /> 안에 넣으면 자동으로 안에 포함되기때문에 java로 짜다보면 추가해주는 걸 자꾸 깜빡하는 경우가 많습니다.
(저... 저만 그럴수도...)




setContentView(rlRelativeLayout);
xml 코드에서보면 Activity_main.xml 의 주소값을 setContentView의 인자로 집어넣어서 사용합니다.
마찬가지로 위에서 설정된 값을 모두 가지는 레이아웃을 인자로 집어 넣어주게 되면, 최초 안드로이드 예제와 똑같은 결과를 얻을수 있게 됩니다.

http://dark0946.tistory.com/119

<script type="text/javascript"><!--
google_ad_client = "ca-pub-1261983873465389";
/* 글 아래 */
google_ad_slot = "3536356550";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Posted by 90002
이전버튼 1 이전버튼

블로그 이미지
90002

공지사항

Yesterday2
Today5
Total125,405

최근에 달린 댓글

최근에 받은 트랙백

글 보관함