[Android] LayoutInflater로 동적으로 레이아웃(뷰) 추가하기
- Mobile/Android
- 2017. 10. 24.
이번 포스팅으로는 LayoutInflater의 사용법에 대해서 한번 알아보도록 하겠습니다. 보통 LayoutInflater은 동적으로 뷰를 컨트롤할 때 사용되고 ListView안에도 많이 쓰이는 기법입니다. 한번 알아두시면 여러 방면으로 응용해 사용하실 수 있으실 겁니다.
LayoutInflater로 동적으로 레이아웃(뷰) 추가하기
아래 예제는 버튼을 누르면 레이아웃이 아랫부분에 계속 복제되는 토이 프로젝트입니다.
MainActivity.java
import android.os.Bundle;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button add_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
add_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Sub n_layout = new Sub(getApplicationContext());
LinearLayout con = (LinearLayout)findViewById(R.id.con);
con.addView(n_layout);
Button but = (Button)container.findViewById(R.id.b1);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "클릭되었습니다.", Toast.LENGTH_LONG).show();
}
});
}
});
}
}
activity_main_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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.user.mylayoutinflater.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonClicked1"
android:id="@+id/add_layout"
android:text="레이아웃 추가"/>
<LinearLayout
android:id="@+id/con"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/add_layout"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
</LinearLayout>
</RelativeLayout>
Sub.java
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
/**
* Created by user on 2016-12-23.
*/
public class Sub extends LinearLayout{
public Sub(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public Sub(Context context) {
super(context);
init(context);
}
private void init(Context context){
LayoutInflater inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.sub,this,true);
}
}
sub.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="내부 레이아웃"
android:textSize="30dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:text="내부 레이아웃 버튼"/>
</LinearLayout>
</LinearLayout>
이렇게 진행하시고 실행을 해보시면
이렇게 버튼을 누를 때마다 레이아웃이 추가가 되는것을 보실 수 있습니다. 저 소스를 응용해서 Randum함수로 누를때마다 이미지가 랜덤으로 나오는 예제 같은 것도 만들 수 있겠네요 이상으로 간단한 LayoutInflater 사용법에 대한 포스팅을 마치겠습니다. 감사합니다.
'Mobile > Android' 카테고리의 다른 글
[Android] ListView에 EditText넣기 (4) | 2017.10.25 |
---|---|
[Android] ListView를 팝업(AlertDialog)창으로 만들기 (1) | 2017.10.25 |
[Android] 안드로이드에서 웹뷰로 자신이 만든 웹사이트 띄우기 (2) | 2017.10.19 |
[Android] 공공기관 API 신청 및 파싱하기(검색기능구현) (28) | 2017.10.18 |