교재 & 강좌/안드로이드 프로그래밍 정복
Chapter 3] Layout (3-4 레이아웃 관리) 코드에서 레이아웃 전개하는 여러가지 방법들
설.현.아빠
2011. 3. 8. 12:09
아..알고 싶었어..단지 표현 방법만 틀릴뿐이지..
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setBackgroundColor(Color.WHITE);
TextView text = new TextView(this);
text.setText("TextView");
text.setGravity(Gravity.CENTER);
text.setTextColor(Color.RED);
text.setTextSize(20);
layout.addView(text);
setContentView(layout);
}
|
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.main, null);
setContentView(linear);
}
|
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout linear = (LinearLayout)inflater.inflate(R.layout.main, null);
setContentView(linear);
}
|
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout linear = (LinearLayout)View.inflate(this,R.layout.main, null);
setContentView(linear);
}
|
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(View.inflate(this,R.layout.main, null));
}
|
위 5개의 코드는 모두 동일한 결과를 볼수 있다. (단 main.XML 파일은 생략)
그때 그때 상황에 따라 적당한 방법을 사용하란다.
그렇다면 inflate를 사용하는 이유는 무엇일까? 예를 들어 TextView를 여기저기서 자주 사용한다고 하면 XML문서에 TextView를 계속
선언하기 보다는 하나의 TextView만 생성해서 inflate시켜서 사용하는게 훨씬 효율적이라는거다. 재사용이지.
괜찮은 방법같다. 계산기 Layout만 간단히 만들어볼까?
<?xml version="1.0" encoding="utf-8"?><Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
|
public class StartAndroid extends Activity { LinearLayout linear;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
linear = new LinearLayout(this);
linear.setOrientation(LinearLayout.VERTICAL);
Button calculator = (Button)View.inflate(this,R.layout.main,null);
calculator.setText("계산기");
calculator.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Button btn0 = (Button)inflater.inflate(R.layout.main,null);
btn0.setText("0");
Button btn1 = (Button)inflater.inflate(R.layout.main,null);
btn1.setText("1");
Button btn2 = (Button)inflater.inflate(R.layout.main,null);
btn2.setText("2");
Button btn3 = (Button)inflater.inflate(R.layout.main,null);
btn3.setText("3");
Button btn4 = (Button)inflater.inflate(R.layout.main,null);
btn4.setText("4");
Button btn5 = (Button)inflater.inflate(R.layout.main,null);
btn5.setText("5");
Button btn6 = (Button)inflater.inflate(R.layout.main,null);
btn6.setText("6");
Button btn7 = (Button)inflater.inflate(R.layout.main,null);
btn7.setText("7");
Button btn8 = (Button)inflater.inflate(R.layout.main,null);
btn8.setText("8");
Button btn9 = (Button)inflater.inflate(R.layout.main,null);
btn9.setText("9");
linear.addView(btn0);
linear.addView(btn1);
linear.addView(btn2);
linear.addView(btn3);
linear.addView(btn4);
linear.addView(btn5);
linear.addView(btn6);
linear.addView(btn7);
linear.addView(btn8);
linear.addView(btn9);
Log.d("LOG","#####");
}
});
Log.d("LOG","*****");
linear.addView(calculator);
setContentView(linear);
}
}
|
흠....만들고 보니....어떤게 더 효율적일까..하는 생각이 문득드네..
일단 XML에는 하나의 버튼만 만들어두고!!
계산기라는 버튼 하나 addView해줬다. 그리고 그 버튼을 클릭하면 나머지 10개의 버튼을 addView해줬다.
아~~~~~동적이다--;;;;
이상한건 setContentView를 한번만 해줬다는거다.
즉 10개의 버튼을 addView한 후에는 setContentView를 안해줘도 버튼이 출력된다...희한하네...