프로그래밍/android2011.04.11 19:48
LinearLayout에 Button을 추가할 때, 지금까지는
LinearLayout layout = (LinearLayout)findViewById(R.id.lyaout);
Button btn = new Button(this);
layout.addView(btn);

이렇게 사용했다.
하지만 이 방법은 모양을 꾸미는게 너무 힘들다. 
다른 소스 찾다가 찾아낸 방법이 바로 LayoutInflater 이다.

<!--?xml version="1.0" encoding="utf-8"?-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
	android:orientation="vertical" 
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent" 
	android:gravity="center">
	<TableLayout 
		android:id="@+id/lyaout" 
		android:layout_width="match_parent" 
		android:layout_height="wrap_content" 
		android:background="#fff" 
		android:stretchcolumns="*">
		<TableRow>
		    <TextView 
		    	android:layout_width="match_parent" 
		    	android:layout_height="match_parent" 
		    	android:gravity="center" 
		    	android:text="날짜" 
		    	android:background="#f00"/>
		    <TextView 
		    	android:layout_width="match_parent" 
		    	android:layout_height="match_parent" 
		    	android:gravity="center" 
		    	android:text="이름" 
		    	android:background="#00f"/>
		    <TextView 
		    	android:layout_width="match_parent" 
		    	android:layout_height="match_parent" 
		    	android:gravity="center" 
		    	android:text="항목" 
		    	android:background="#0f0"/>
		    <TextView 
		    	android:layout_width="match_parent" 
		    	android:layout_height="match_parent" 
		    	android:gravity="center" 
		    	android:text="금액" 
		    	android:background="#f1f"/>
		</TableRow> 
	</TableLayout>
</LinearLayout>
TableLayout과 머릿말용 TableRow만 하나 생성해둔다.



<!--?xml version="1.0" encoding="utf-8"?-->
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
	android:id="@+id/row" 
	android:layout_width="match_parent" 
	android:layout_height="wrap_content">
	<TextView 
		android:id="@+id/date" 
		android:layout_width="match_parent" 
		android:layout_height="match_parent" 
		android:gravity="center" 
		android:background="#ff0">
	<TextView 
		android:id="@+id/name" 
		android:layout_width="match_parent" 
		android:layout_height="match_parent" 
		android:gravity="left|center_vertical" 
		android:background="#f00">
	<TextView 
		android:id="@+id/item" 
		android:layout_width="match_parent" 
		android:layout_height="match_parent" 
		android:gravity="left|center_vertical" 
		android:background="#00f">
	<TextView 
		android:id="@+id/amt" 
		android:layout_width="match_parent" 
		android:layout_height="match_parent" 
		android:gravity="right|center_vertical" 
		android:background="#0f0">
</TableRow>
view_item_money에는 데이터 행이 될 한 row를 생성한다.



public class Money extends Activity
{
	LinearLayout layout;
	LayoutInflater mInf;
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_money);
		
		layout = (LinearLayout) findViewById(R.id.lyaout);
		mInf = getLayoutInflater();
		
		setInfo();
		setInfo2();
		setInfo();
		setInfo2();
		setInfo();
	}
	
	private void setInfo()
	{
		View v = mInf.inflate(R.layout.view_item_money, null);
		TextView date = (TextView) v.findViewById(R.id.date);
		date.setText("2011-04-01");
		
		TextView name = (TextView) v.findViewById(R.id.name);
		name.setText("김태희");
		
		TextView item = (TextView) v.findViewById(R.id.item);
		item.setText("축의금");
		
		TextView amt = (TextView) v.findViewById(R.id.amt);
		amt.setText("100,000");
		
		v.setOnClickListener(new View.OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				Log.e("###", "onClick1");
			}
		});
		
		v.setOnLongClickListener(new View.OnLongClickListener()
		{
			@Override
			public boolean onLongClick(View v)
			{
				Log.e("###", "onLongClick1");
				return true;
			}
		});
		
		layout.addView(v);
	}
	
	private void setInfo2()
	{
		View v = mInf.inflate(R.layout.view_item_money, null);
		TextView date = (TextView) v.findViewById(R.id.date);
		date.setText("2011-04-08");
		
		TextView name = (TextView) v.findViewById(R.id.name);
		name.setText("문근영");
		
		TextView item = (TextView) v.findViewById(R.id.item);
		item.setText("돌잔치");
		
		TextView amt = (TextView) v.findViewById(R.id.amt);
		amt.setText("50,000");
		
		v.setOnClickListener(new View.OnClickListener()
		{
			@Override
			public void onClick(View arg0)
			{
				Log.e("###", "onClick2");
			}
		});
		
		v.setOnLongClickListener(new View.OnLongClickListener()
		{
			@Override
			public boolean onLongClick(View v)
			{
				Log.e("###", "onLongClick2");
				return true;
			}
		});
		
		layout.addView(v);
	}
}

소스파일에서는 view_item_money를 불러와서 그 안에 있는 컴포넌트들을 찾아서 정보를 넣고, 그걸 메인화면에 뿌린다.



그럼 이런 식으로 new로 컴포넌트를 생성하지 않고도 child를 추가할 수 있다.
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 쎄미

댓글을 달아 주세요