Study Record

[안드로이드] Activity 와 layout 파일 본문

안드로이드

[안드로이드] Activity 와 layout 파일

초코초코초코 2023. 6. 11. 21:08
728x90

😶 Activity 와 Layout

 

프로그램을 시작할 때 main 함수로 시작한다거나 하는 단일 진입 지점이 안드로이드 앱에는 존재하지 않는다. 핸드폰 기기의 앱 아이콘을 눌러 앱을 시작할 때도 있고 특정 앱을 사용하다가 카메라 앱에 접근하는 등 여러 가지 방식으로 앱을 시작할 수 있다. 

 

 

Activity 는 사용자와 상호작용하기 위한 진입점이고 사용자 인터페이스(버튼, 검색 입력 바 등)를 포함한 하나의 화면이다.  Activity 는 사용자 인터페이스에 대한 규격을 가지고 있는 layout 파일을 가진다.

 

(layout 파일 예시)

<?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="match_parent"
    android:layout_height="wrap_content"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>

 

 

다음 예시 코드에서도 onCreate() 함수가 불릴 때 setContentView() 함수로 해당하는 layout 파일을 인수로 받고 있다.

class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
   	setContentView(R.layout.activity_main)
  }

}

 

 

액티비티가 어떤 사용자에게 보여지는 화면을 정의한다는 것은 이제 알지만, 어떤 타이밍(상황)에 어떤 액티비티가 사용될지를 정해야 한다.

앱 아이콘을 눌러 실행했을 때 실행되는 화면이 어떤 건지,
카메라 기능이 있는 앱인데 다른 앱에서 카메라의 기능을 사용하고자 할 때 어떤 화면을 보여줄지, 

 

등 상황마다 불러야 할 화면이 다를 수 있다. 이런 사항들을 정의하는 것은 AndroidManifest.xml 파일이다.

 

 

매니패스트 파일(AndroidManifest.xml) 에는 <activity>에 Activity 에 대한 정보도 기재되어 있는데 그 태그 안에 Intent-filter 태그로 어떤 상황에 해당 Activity 가 사용되는지 정의할 수 있다. 다음 코드는 사용자가 앱 아이콘을 눌러 시작했을 때 시작할 Activity 를 보여준다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.myapp">
    
    <application
        android:name=".config.ApplicationClass"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Mbamboo"
        tools:targetApi="31">
       
        <activity
            android:name=".src.SplashActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

 

 

😶 layout 구조

레이아웃은 View 와 ViewGroup 객체의 계층 구조를 사용하여 빌드된다. 반드시 하나의 루트 View Group 이 존재한다.

 

출처 android developers

 

 

View 객체는 일반적으로 위젯이라고 불리며 사용자가 보고 상호작용할 수 있는 것을 그리고, ViewGroup 객체는 레이아웃 구조를 정의하는 보이지 않는 컨테이너이다.

 

예를 들어, LinearLayout(ViewGroup) 이면 View 와 ViewGroup 을 선형으로 위치할 수 있는 컨테이너이며 수평, 수직으로 View 와 ViewGroup 을 위치시킬 수 있다. RelativeLayout(ViewGroup) 은 하위 View 와 ViewGroup 를 기준으로 얼마큼 떨어져 있는지 등으로 서로 겹칠 수 있게 뷰를 위치할 수 있다. 

 

 

😶 레이아웃 매개변수(LayoutParams)

View 와 ViewGroup 의 컨테이너 역학을 하는 ViewGroup 는 LayoutParams 를 가지고 하위 요소에 확장한다. 따라서 하위 요소의 LayoutParams 는 상위 요소에 적합한 LayoutParams 를 정의해야 한다.

 

 

이는 런타임 도중 새로운 뷰를 생성할 때 상위 ViewGroup 이 LinearLayout 이면 LinearLayout.LayoutParams 를 가지고 RelativeLayout 이면 RelativeLayout.LayoutParams 를 가져야 한다는 의미이다.

 

 

LayoutParams 에는 너비와 높이(layout_width, layout_height), 여백과 테두리 (Padding, margin) 을 포함한다.

 

 

 

 

레이아웃  |  Android 개발자  |  Android Developers

레이아웃은 활동 또는 앱 위젯의 UI와 같은 사용자 인터페이스의 시각적 구조를 정의합니다. 두 가지 방법으로 레이아웃을 선언할 수 있습니다. Android 프레임워크를 통해 이 두 가지 메서드의 하

developer.android.com

 

728x90