동적레이아웃(DynamicLayout) - Orientation

Posted by ITPangPang
2016. 10. 10. 01:16 안드로이드(android)/레이아웃(Layout)



동적레이아웃(DynamicLayout)

Orientation


ㆍsetOrientation


ㆍ이번글에서는 간단하게 Orientation과

   동적으로 레이아웃을 만들때 처음에 어떤식으로

   접근해야 되는지 알아보도록 하겠습니다



이번글에서 만들어볼 화면


위의 화면을 만들기 위해서는

기본적으로 LinearLayout 2개가 필요합니다

(아 물론 Linear로만 만들때 기준

Relative는 나중에 할 예정입니다)


LinearLayout 하나는 Orientation Vertical

하나는 Horizontal로 설정해줘야 합니다.


그리고 버튼 3개가 필요하겠죠


그리고

LinearLayout이든 Button이든

width, height는 전부 Wrap_content

주면 될 것같습니다.




xml로 짜보면 이런식으로

해주면 되겠죠

<?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="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="com.tistory.itpangpang.dynamicviewex2.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="3" />
</LinearLayout>
</LinearLayout>


그럼 위에 정보를

토대로 자바코드로만

똑같이 만들어보겠습니다


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

LinearLayout ll_one = new LinearLayout(this);
LinearLayout ll_two = new LinearLayout(this);

Button btn_one = new Button(this);
Button btn_two = new Button(this);
Button btn_three = new Button(this);

setContentView(ll_one);
}
}


먼저 여기까지만 보면

단순히 코드로

LinearLayout 2개와

Button 3개를 생성했습니다


그리고


전체를

감싸는 LinearLayout이

ll_one이므로


setCountentView(ll_one);

으로 적어줬습니다


그 다음

ll_one 2명의 자식들이

btn_one(Button)

ll_two(LinearLayout(손자:Button))

세로로 나열되있으므로

Orientation

Vertical로 잡다주고


ll_two 2명 자식들이

2(Button) 3(Button)

가로로 나열되있으므로

Orientation

Horizontal로 잡아줍니다


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

LinearLayout ll_one = new LinearLayout(this);
LinearLayout ll_two = new LinearLayout(this);

Button btn_one = new Button(this);
Button btn_two = new Button(this);
Button btn_three = new Button(this);

ll_one.setOrientation(LinearLayout.VERTICAL);
ll_two.setOrientation(LinearLayout.HORIZONTAL);


setContentView(ll_one);
}
}


그 다음에

LinearLayout 부모들은

자식들을 다 품어줍니다

(addView)

public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

LinearLayout ll_one = new LinearLayout(this);
LinearLayout ll_two = new LinearLayout(this);

Button btn_one = new Button(this);
Button btn_two = new Button(this);
Button btn_three = new Button(this);

ll_one.setOrientation(LinearLayout.VERTICAL);
ll_two.setOrientation(LinearLayout.HORIZONTAL);

ll_one.addView(btn_one);
ll_one.addView(ll_two);

ll_two.addView(btn_two);
ll_two.addView(btn_three);


setContentView(ll_one);
}
}


아 한가지 까먹은

부분이..


Button 자식들의

이름을 붙여줘야됩니다

(setText)


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

LinearLayout ll_one = new LinearLayout(this);
LinearLayout ll_two = new LinearLayout(this);

Button btn_one = new Button(this);
Button btn_two = new Button(this);
Button btn_three = new Button(this);

btn_one.setText("1");
btn_two.setText("2");
btn_three.setText("3");


ll_one.setOrientation(LinearLayout.VERTICAL);
ll_two.setOrientation(LinearLayout.HORIZONTAL);

ll_one.addView(btn_one);
ll_one.addView(ll_two);

ll_two.addView(btn_two);
ll_two.addView(btn_three);

setContentView(ll_one);
}
}


마지막으로

지난글에서 했던

width, height만

WRAP_CONTENT로

넣어주면 마무리가

될 것 같습니다


public class MainActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

LinearLayout ll_one = new LinearLayout(this);
LinearLayout ll_two = new LinearLayout(this);

Button btn_one = new Button(this);
Button btn_two = new Button(this);
Button btn_three = new Button(this);

btn_one.setText("1");
btn_two.setText("2");
btn_three.setText("3");

ll_one.setOrientation(LinearLayout.VERTICAL);
ll_two.setOrientation(LinearLayout.HORIZONTAL);

ll_one.addView(btn_one);
ll_one.addView(ll_two);

ll_two.addView(btn_two);
ll_two.addView(btn_three);

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
btn_one.setLayoutParams(layoutParams);
ll_two.setLayoutParams(layoutParams);


setContentView(ll_one);
}
}



결과확인!


잘 나왔습니다!!