RelativeLayout 동적으로 View 배치
RelativeLayout 안에서
코드를 통한 View 배치
ㆍ LinearLayout과 크게 다른점은 없으나, View를 정렬하는
부분에서 알아보고 가야할 부분이 있으므로 짧게 적어봅니다.
간단하게 알아볼 것
이 3가지만 보고 가겠습니다.
android:layout_centerInParent
android:layout_centerHorizontal
android:layout_below
그리고
이번글에서 만들어볼 화면
TextView, Button
각각 1개씩 배치되어 있는
화면입니다.
이 화면을 xml에서 만들면
아래와 같은 식으로 간단하게
만들 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="xyz.itpangpang.study.MainActivity">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1단계"
android:textColor="#104616"
android:textSize="30dp"
android:layout_centerInParent="true"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:layout_below="@+id/tv"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
이번에는 java 코드를 통해서
먼저 최상단
RelativeLayout은 생성해놓고
시작하겠습니다.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
}
이제 하나하나 추가해보겠습니다.
먼저 TextView를 생성한 후에
text, color, size를 적어주겠습니다.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
TextView tv = new TextView(this);
tv.setText("1단계");
tv.setTextColor(Color.parseColor("#104616"));
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
}
이제 id를 부여하고
TextView를 화면의 중앙에
가져다 놓기 위해서
centerInParent를 True로 놔야겠죠
id를 부여하기 위해서
[values]-[ids.xml]을 하나
만든 후에 아래와 같이 적어줍니다
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="stage_text_view" />
</resources>
위에서 만든
id를 setId하고
TextView를 중앙에 놓기 위해
LayoutParams을 하나 만들어 준 후에
속성값을 넣어줍니다.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
TextView tv = new TextView(this);
tv.setText("1단계");
tv.setTextColor(Color.parseColor("#104616"));
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
tv.setId(R.id.stage_text_view);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams
(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
tv.setLayoutParams(layoutParams);
rl.addView(tv);
}
RelativeLayout의 LayoutParams에서는
addRule이란 메서드가 있습니다.
이 addRule을 통해서 View의 배치를
할 수 있습니다.
여기까지 하고 실행을 한번 해보면
아래와 같은 화면을 볼 수 있습니다
이제 똑같은 방법으로
TextView 아래에 START라는
버튼을 놓아보겠습니다.
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
TextView tv = new TextView(this);
tv.setText("1단계");
tv.setTextColor(Color.parseColor("#104616"));
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 30);
tv.setId(R.id.stage_text_view);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams
(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
tv.setLayoutParams(layoutParams);
rl.addView(tv);
RelativeLayout.LayoutParams buttonLayoutParams = new RelativeLayout.LayoutParams
(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
Button button = new Button(this);
button.setText("START");
buttonLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
buttonLayoutParams.addRule(RelativeLayout.BELOW, tv.getId());
button.setLayoutParams(buttonLayoutParams);
rl.addView(button);
}
위와 똑같은 방법으로
addRule을 적은 후에
이번에는
CENTER_HORIZONTAL을 적용한 후에
추가로 TextView 아래에 위치 해야 하므로
BELOW도 적어주었습니다.
위와 같이 작성 후
돌려보면 처음 xml에서 작성한
화면과 똑같은 화면을 얻을 수 있습니다.
이번글에서는
addRule과 setId를 작성하는 부분만
잘 알아두시면 될 것 같습니다.
setId 하는 방법은 위 방법 말고도
다른 방법이 있습니다만, 다른 방법은
TextView를 반복적으로 생성하거나 할때
한번 다뤄보도록 하겠습니다.
'안드로이드(android) > 레이아웃(Layout)' 카테고리의 다른 글
Layout 가로/세로 처리하기(Landscape/portrait) (0) | 2017.02.19 |
---|---|
RelativeLayout margin 안먹히는 경우 (1) | 2016.12.11 |
동적레이아웃(DynamicLayout) - Margin, Padding (0) | 2016.10.10 |
동적레이아웃(DynamicLayout) - Orientation (0) | 2016.10.10 |
동적레이아웃(DynamicLayout) - width, height (2) | 2016.10.09 |