본문 바로가기

프로그래밍/안드로이드

[안드로이드] 레이아웃 관리(실행중에 속성 바꾸기)

※ 저는 안드로이드 프로그래밍 정복(김상형 著, 한빛미디어) 책을 이용해 공부하고 있으며

예제와 코드는 이 책을 통해 공부중임을 밝힙니다.

개인적인 공부를 하면서 정리한 형식이기 때문에 심각한 오류가 있을 수 있습니다. 피드백 주시면 정말 감사하겠습니다.


※ 안드로이드 프로그래밍 정복(191p~196p) 참조


위젯을 실행중에(동적일 떄) 사용자의 입력이나 출력할 정보의 양에 따라 필요한 위젯의 종류가 개수가 달라지는 경우


실행중에 속성을 바꿔줘야 할 필요가 있다.


속성값을 변경 : 속성 이름 앞에 set을 붙이고, 속성의 첫자를 대문자로 시작하는 것이 관례


속성값을 읽기 : 속성 이름 앞에 get을 붙이고, 속성의 첫자를 대문자로 시작하는 것이 관례


EX) void TextView.setGravity (int gravity)

void setText (CharSequence text)

void setTextColor (int color)

void setTextSize (float size)




몰랐지만, R.java 파일을 열어보면 우리가 "+@id/mylinear", "+@id/mybutton" 이런 식으로 


id 속성을 .xml 파일에 지정해줄 때마다, R.java에 정의한 ID를 "상수"로 정의한다. 


R클래스는 코드를 전혀 갖지 않고, 리소스에서 정의한 ID를 상수로 정의만 한다.


     


그래서 우리가 항상 .java에서 항상 R.layout.~~~~.을 볼 수 있었던 것이다.


코드에서 참조하려면 R.타입.ID를 사용한다.


정리해보자면, R.layout.activity_exercise가 "참조"하는 레이아웃 문서 activity_exercise.xml을 "읽어서" 문서의 내용대로


레이아웃을 만들어 액티비티에 채우는 것이다.



그래서 이러한 실행 결과를 얻을 수 있던 것이다.



다시, 돌아가서 코드를 좀 수정해보자.




setOrientation을 통해서 vertical(수직) -> horizontal(수평)으로 바꿨으니 수평으로 나란히 배치되고


이외에 set을 통해서 TextSize와 BackgroundColor를 변경했다.


<주의점> 


① XML 문서에서는 수치값 지정시 px, dip, in을 사용할 수 있지만


.java 코드에서는 무조건 픽셀(px) 단위이다. 따라서 별도의 메서드를 통해서 픽셀로 변환하는 작업이 필요하다.


② 색상 : XML에서는 기본값이 0xff이지만 .java 코드에서는 0이다.


ex) 초록색 ( .xml #00ff00 )  ( .java  0xff00ff00)



<.xml>

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

<Button
android:id="@+id/mybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼"/>


<TextView
android:id="@+id/mytext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="문자열"/>

<EditText
android:id="@+id/myedit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="에디트"/>

</LinearLayout>


<.java>

package lkcompany.exercise;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;


public class Exercise extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exercise);

LinearLayout MyLinear=(LinearLayout)findViewById(R.id.mylinear);
MyLinear.setOrientation(LinearLayout.HORIZONTAL);

Button MyBtn = (Button)findViewById(R.id.mybutton);
MyBtn.setTextSize(40);

EditText MyEdit = (EditText)findViewById(R.id.myedit);
MyEdit.setBackgroundColor(0xff00ff00);

}

}