본문 바로가기
Android/Dev

Layout의 위치를 xml이 아닌 Code를 통해 조절하기

by featherwing 2020. 4. 1.
728x90
반응형

안드로이드 어플리케이션에서 눈으로 보이는 부분과 실제 기능을 구현하는 부분은 구분되어 있습니다.

 

앱을 실행하면 Hello world 라는 TextView가 뜨는 간단한 MainActivity 하나로만 구성된 앱이 있다면

  

보이는 앱의 화면은 MainActivity.xml로 디자인하고, 구현되는 코드부분은 MainActivity.java(코틀린이라면 .kt)로 구현합니다.

 

xml 레이아웃 파일에는 버튼이나 텍스트뷰의 위치, @+id로 부여하는 각 요소들의 id와 같은 속성이 여기에 다 있습니다.

 

 

앱을 개발할 때 앱의 특정 기능 실행에 따라 버튼의 위치를 변경한다던지 

 

유기적인 레이아웃을 구성해야 할 때가 있습니다.

 

레이아웃의 위치를 xml 파일에 설정한 것과 다르게 코드를 통해서 바꾸고 싶다면 

 

아래의 LayoutParams.addRule로 변경해 줄 수 있습니다.

params.addRule(RelativeLayout.ALIGN_PARENT_TOP);

 

자세한 사용방법은 아래와 같습니다.

 

RelativeLayout 내부에 LinearLayout이 들어있는 xml을 가정하면 

아래와 같이 LinearLayout의 위치를 변경시켜 줄 수 있습니다.

LinearLayout mLlinearLayout;

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

mLlinearLayout = findViewById(R.id.linearlayout);

}

 

public static void setTop() {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
mLlinearLayout.setLayoutParams(params);
}


public static void setCenter() {
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_VERTICAL);
mLinearLayout.setLayoutParams(params);
}

 

각 Layout마다 적용했을때의 효과가 다르기 때문에 각 레이아웃의 특성을 파악하셔야 편하게 쓸 수 있습니다.

*LayoutParams사용시에는 부모뷰를 기준으로 속성을 부여해야 합니다.

 

위의 예시의 RelativeLayout 속에 있는 LinearLayout에는 ALIGN_PARENT_TOP이나 CENTER_VERTICAL과 같은 속성을

간단하게 부여하는 것만으로, LinearLayout의 위치가 가장 위쪽으로 이동하거나, 중간에 이동하도록 만들 수 있습니다.

 

자세한 사용방법은 안드로이드 개발자문서의 LayoutParam.addRule에서 확인할 수 있습니다.

 

728x90
반응형

댓글