레이아웃(Layout)을 동적으로 생성 해보자(1)

Posted by ITPangPang
2016. 5. 18. 00:44 안드로이드(android)/레이아웃(Layout)


레이아웃(Layout)을 

동적으로 생성 해보자(1)




ㆍ레이아웃을 생성하는 방법에는 총 3가지 방법이 있습니다.

xml으로만 생성하는 방법이 있습니다.

   (정적 레이아웃, static layout)

코드로만 생성하는 방법이 있습니다.

   (동적 레이아웃, dynamic layout)

ㆍ그리고 이 둘을 섞어서 생성하는 방법이 있습니다



방법은 총 

3가지가 있으나

선택하는 것은 

개발자마음입니다.


성능에서도

차이가 있다고는

하는데 솔직히

눈에 띄지도 

않는정도입니다.


xml로만 레이아웃을

구성하게 되면

아무래도 관리하기가

편리합니다.


동적생성으로만 

레이아웃을

구성하게 되면

xml에 비해 속도가 

빠르고 유연하게

코드를 짤 수 있습니다


뭐 단점을 각각 보자면


xml로만 구성하면

앱의 기능중에

조금이라도 UI변화가

생기면 처리해야하는

부분에 있어서 아무래도

동적으로 생성했을때보다

번거로운점이 있습니다.


동적생성의 단점은

프로젝트가 커지고

화면을 구성하는 뷰가

많아졌을때 관리하기가

상당히 까다롭습니다.

아무리 개발자가 표시를

잘해둔다고 해도 

xml로 관리하는것에 비하면

상당히 뒤떨어집니다.


이런 장단점때문에

보통 기본틀은 

xml로 잡고 안의

세부 위젯들은 동적으로

생성들을 많이 합니다.


그럼

동적생성 그 첫번째로

Hello World를

3가지 방법을 통해서

찍어보겠습니다.


1. XML로 Hello World

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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="com.tistory.itpangpang.myapplication.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>

뭐 딱히 수정할 부분도 없습니다.


2. XML + 코드로 Hello World

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/ll"
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"
android:orientation="vertical"
tools:context="com.tistory.itpangpang.myapplication.MainActivity">
</LinearLayout>


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout ll = (LinearLayout)findViewById(R.id.ll);
TextView tv = new TextView(this);
tv.setText("Hello World");
ll.addView(tv);
}
}

전체레이아웃만

 xml 잡아놓고

코드에서 레이아웃에

들어가는 자식위젯을

추가해서 화면에 띄어줍니다


3.코드로 Hello World

public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
LinearLayout ll = new LinearLayout(this);
TextView tv = new TextView(this);
tv.setText("Hello World");
ll.addView(tv);
setContentView(ll);
}
}

여기도 뭐 그리 어려운부분은 없습니다

LinearLayout이건 TextView건

new를 통해서 생성해준 후에

addView를 통해서 부모뷰에

자식뷰를 올리고

마지막에 setContentView로

화면에 띄어주면 됩니다.


제대로 따지자면 아직

Width, Height 속성들을

안넣어서 100% 같다고

할 수는 없지만


원리는 대충 이런식입니다

다음글에서

Layoutparams을 포함해서

보다 꼼꼼하게 동적으로

생성하는 방법을 알아보겠습니다.