이 튜토리얼에서는 Android 앱에서 TextView를 LinearLayout에 코드로 동적으로 추가하는 방법을 단계별로 알아봅니다. XML 레이아웃에 미리 정의하지 않고, Java 코드에서 뷰(View)를 생성하여 화면에 배치하는 기법은 리스트 항목, 태그, 버튼 등을 런타임 상황에 따라 유연하게 구성해야 할 때 매우 유용합니다.
1단계: 새 프로젝트 생성
Android Studio를 실행하고 File → New Project 메뉴로 이동한 후, 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다. Empty Activity 템플릿을 선택하면 이 예제를 따라 하기에 가장 적합합니다.
2단계: activity_main.xml 레이아웃 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다. 여기서는 세로 방향(orientation="vertical")의 빈 LinearLayout만 정의합니다. 이 컨테이너에 나중에 코드로 TextView를 추가하게 됩니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:id="@+id/rlMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
android:orientation="vertical" />3단계: MainActivity.java 코드 작성
src/MainActivity.java 패키지에 다음 코드를 추가합니다. 핵심 로직은 다음과 같습니다.
- findViewById()로 XML에 정의된 LinearLayout을 가져옵니다.
- new TextView(this)로 TextView 인스턴스를 코드에서 직접 생성합니다.
- setText() 메서드로 화면에 표시할 텍스트를 지정합니다.
- LinearLayout.LayoutParams 객체를 생성해 너비와 높이 등 레이아웃 속성을 설정합니다.
- addView() 메서드로 생성한 TextView를 LinearLayout에 추가합니다.
package app.com.sample;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout llMain = findViewById(R.id.rlMain);
TextView textView = new TextView(this);
textView.setText("I am added dynamically to the view");
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
textView.setLayoutParams(params);
llMain.addView(textView);
}
}4단계: AndroidManifest.xml 확인
androidManifest.xml 파일에 아래 코드가 올바르게 설정되어 있는지 확인합니다. MainActivity가 LAUNCHER 인텐트 필터를 포함하고 있어야 앱 실행 시 해당 액티비티가 시작됩니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 Android 스마트폰을 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run(실행) 아이콘을 클릭하세요. 옵션 목록에서 연결된 모바일 기기를 선택하면, 기기 화면에 아래와 같이 동적으로 추가된 TextView가 표시되는 것을 확인할 수 있습니다.

마무리 및 추가 팁
이처럼 addView() 메서드를 활용하면 XML 수정 없이도 런타임에 뷰를 자유롭게 추가할 수 있습니다. 실무에서는 반복문과 함께 사용해 여러 개의 TextView를 한 번에 추가하거나, 서버에서 받아온 데이터 목록을 화면에 동적으로 렌더링하는 데 활용됩니다. 참고로 항목 수가 많다면 RecyclerView 사용을 고려하는 것이 성능 면에서 더 효율적입니다.