<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>COMPUTER</title>
    <link>https://rina214.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 9 Aug 2026 14:37:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>RINAAA</managingEditor>
    <image>
      <title>COMPUTER</title>
      <url>https://tistory1.daumcdn.net/tistory/3463347/attach/c99610dd11e04e16a1b0a53891d1c799</url>
      <link>https://rina214.tistory.com</link>
    </image>
    <item>
      <title>[DSC] 위치기반 서비스와 센서 사용하기</title>
      <link>https://rina214.tistory.com/24</link>
      <description>&lt;p&gt;이번 주는 투표를 받아 위치기반 서비스와 센서 사용하기를 주제로 세션을 진행하겠습니다. :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위치기반 서비스는 지상의 위치 정보를 이용해서 휴대 단말 사용자에게 다양한 서비스를 제공합니다. 안드로이드 폰은 GPS와 센서가 기본으로 장착되어 있어 자신의 위치를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. GPS로 나의 위치 확인하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;안드로이드 기반의 스마트폰 위치는 &lt;b&gt;위치 관리자(LocationManager)&lt;/b&gt;라는 시스템 서비스가 관리합니다. 실제로 android.location 패키지에는 이 클래스를 포함하여 위치 정보를 확인하거나 확인된 위치 정보를 사용하는데 필요한 클래스들이 정의되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나의 현재 위치를 확인하는 가장 기본적인 방법은 위치 관리자에게 위치 정보를 요청하는 것입니다. 그러려면 다음과 같은 단계를 거쳐야 합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 위치 관리자 객체 참조하기&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;위치 관리자(LocationManager)는 시스템 서비스로 제공되므로, getSystemService() 함수를 이용해 위치 관리자 객체를 참조합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 위치 리스너 구현하기&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;위치 관리자가 알려주는 현재 위치는 위치 리스너(LocationListener)를 통해 받게 되므로 새로운 리스너를 구현하여 전달 받은 위치 정보를 처리합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 위치 정보 업데이트 요청하기&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;위치 관리자에게 위치 정보가 변경될 때마다 알려달라고 요청하기 위해 requestLocationUpdate() 함수를 호출합니다. 이 함수의 parameter로 2번에서 구현한 위치 리스너 객체를 전달합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 매니페스트에 추가하기&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;GPS를 사용할 수 있도록 매니페스트 파일에 ACCESS_FINE_LOCATION 권한을 추가하고 위험권한을 위한 설정과 코드를 추가합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실습을 통해 현재 위치를 나타내보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;프로젝트를 새로 만들고 이름은 Week5로 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;1. 위치 관리자 객체 참조하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activitiy_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1591268475006&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/tv_location&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot; /&amp;gt;
    
    &amp;lt;Button
        android:id=&quot;@+id/btn_myLocation&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;나의 위치&quot; /&amp;gt;
    
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;activity_main.xml에서 TextView와 Button을 하나씩 만들어 줍니다. 버튼을 누르면 내 위치 확인을 시작하도록 하고 위치가 확인되면 텍스트뷰에 보여줄 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591268766617&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week5;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView tv_location;
    Button btn_myLocation;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        tv_location = findViewById(R.id.tv_location);
        btn_myLocation = findViewById(R.id.btn_myLocation);
        btn_myLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLocationService();
            }
        });
    }
    
    public void startLocationService() {
        LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (Build.VERSION.SDK_INT &amp;gt;= 23 &amp;amp;&amp;amp; 
                ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            String message = &quot;최근 위치 -&amp;gt; Latitude : &quot; + latitude + &quot;\nLongitude : &quot; + longitude;
            tv_location.setText(message);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;똑같이 따라 쓰셨다면 manager.getLastKnownLocation()에서 빨간줄이 떴을거예요. 이는 권한이 없기 때문인데 필요한 권한을 추가하기 위해 AndroidManifest.xml 파일에 코드를 추가해 봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AndroidManifest.xml&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591268884900&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;appication&amp;gt; 태그 위에 추가하시면 될 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;2. 위치 리스너 구현하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;위치 리스너(LocationListener)는 위치 관리자에서 전달하는 위치 정보를 받기 위해 정의된 인터페이스입니다.&lt;/p&gt;
&lt;p&gt;위리 관리자가 위치 정보를 전달할 때 호출되므로 위치 정보를 받아 처리하려면 이 리스너의 onLocationChanged() 함수를 구현해야 합니다. MainActivity 클래스 안에 LocationListener 인터페이스를 구현하는 클래스를 내부 클래스로 정의해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591269282456&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    ...
    class GPSListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            Double latitude = location.getLatitude();
            Double longitude = location.getLongitude();
            String message = &quot;최근 위치 -&amp;gt; Latitude : &quot; + latitude + &quot;\nLongitude : &quot; + longitude;
            tv_location.setText(message);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onProviderDisabled(String provider) {}
    }
    ...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;3. 위치 정보 업데이트 요청하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;위치 관리자는 일정한 시간 간격으로 위치 정보를 확인하거나 일정 거리 이상을 이동했을 때 위치 정보를 전달하는 기능을 제공합니다. 위치 관리자에게 현재 위치를 알려달라고 요청하기 위해서는 requestLocationUpdates() 함수를 호출해야 하는데 parameter에는 최소 시간과 최소 거리, 위치 리스너 객체가 전달되어야 합니다. 1번에서 작성한startLocationService() 함수를 수정하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591269863403&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public void startLocationService() {
        ...
        앞에는 그대로
        ...
        
        GPSListener gpsListener = new GPSListener();
        long minTime = 10000;
        float minDistance = 0;
        
        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsListener);
        Toast.makeText(getApplicationContext(), &quot;내 위치확인 요청함&quot;, Toast.LENGTH_SHORT).show();
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;최소 시간은 10초, 최소 거리는 0으로 하여 10초마다 위치 정보를 전달받게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;4. 매니페스트에 추가하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;GPS를 이용해 위치 정보를 받기 위한 권한은 ACCESS_FINE_LOCATION으로 정의되어 있으므로 앞에서 이 권한은 추가했습니다. 그런데 이 권한은 위험 권한으로 분류되어 있으므로 위험 권한을 부여하는 설정과 코드를 추가하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;build.gradle(Module:app)&lt;/p&gt;
&lt;pre id=&quot;code_1591270102117&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
	...
    implementation 'com.github.pedroSG94:AutoPermissions:1.0.3'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;다 입력하고 상단에 Sync Now를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591270738521&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        AutoPermissions.Companion.loadAllPermissions(this, 101);
    }

    ...

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
    }

    @Override
    public void onDenied(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), &quot;permissions denied : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onGranted(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), &quot;permissions granted : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 앱을 실행시켜 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;328&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GYelQ/btqEDSvK6Fo/CWmmISxSailC5ku1pAN8gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GYelQ/btqEDSvK6Fo/CWmmISxSailC5ku1pAN8gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GYelQ/btqEDSvK6Fo/CWmmISxSailC5ku1pAN8gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGYelQ%2FbtqEDSvK6Fo%2FCWmmISxSailC5ku1pAN8gK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;328&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 제일 처음에 권한을 부여하라는 대화상자가 표시됩니다. 허용해봅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lF1qr/btqED0G8ibI/udbNuufqDl0QHyxwzsb34K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lF1qr/btqED0G8ibI/udbNuufqDl0QHyxwzsb34K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lF1qr/btqED0G8ibI/udbNuufqDl0QHyxwzsb34K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlF1qr%2FbtqED0G8ibI%2FudbNuufqDl0QHyxwzsb34K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼이 존재하고 이 버튼을 누르면 현재 위치의 위도와 경도가 TextView에 나타나게 됩니다. 에뮬레이터로 실행하면 기본적으로 미국위치가 뜨고, 가상 위치를 따로 설정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKZs9D/btqEDSJhOE0/8xdjYOOAFO1VmMZsh1iJ9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKZs9D/btqEDSJhOE0/8xdjYOOAFO1VmMZsh1iJ9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKZs9D/btqEDSJhOE0/8xdjYOOAFO1VmMZsh1iJ9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKZs9D%2FbtqEDSJhOE0%2F8xdjYOOAFO1VmMZsh1iJ9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;에뮬레이터 옆의 ... 버튼을 누르고 Location 탭을 누릅니다. 그리고 위치를 선택해주고 SAVE POINT를 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;347&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbxhrJ/btqEBobMKcD/JWZvzkWdgeNkw9pCmSRR41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbxhrJ/btqEBobMKcD/JWZvzkWdgeNkw9pCmSRR41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbxhrJ/btqEBobMKcD/JWZvzkWdgeNkw9pCmSRR41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbxhrJ%2FbtqEBobMKcD%2FJWZvzkWdgeNkw9pCmSRR41%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;347&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기는 PNU라고 적어두고 OK를 누릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;706&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q09LY/btqEDZ2uiQu/UYQnSKiu8skyRgdahSIykK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q09LY/btqEDZ2uiQu/UYQnSKiu8skyRgdahSIykK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q09LY/btqEDZ2uiQu/UYQnSKiu8skyRgdahSIykK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ09LY%2FbtqEDZ2uiQu%2FUYQnSKiu8skyRgdahSIykK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;706&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 오른쪽 하단의 SET LOCATION을 누르면 현재 위치로 설정된 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱에서 다시 '나의 위치' 버튼을 누르면 PNU의 위도, 경도를 알려주는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 현재 위치의 지도 보여주기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;현재 위치를 위도, 경도로 보여주면 아무도 알아볼 수 없을 것입니다. 그렇기 때문에 지도를 이용하여 위치를 나타낼 것 입니다. 지도는 어떻게 보여주는 것일까요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안드로이드에서는 앱 화면 안에 지도를 넣을 수 있도록 맵프래그먼트(MapFragment)가 제공됩니다. 맵 프래그먼트는 새로운 방식의 구글맵 서비스 v2 기능을 사용할 수 있도록 추가된 기능으로 Google Play Service 모듈을 사용합니다. 지도를 보여주기 위해서는 다음 과정이 필요합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;middot; Google Play Services 라이브러리 사용 설정하기&lt;/p&gt;
&lt;p&gt;&amp;nbsp; 구글맵 서비스 v2는 Play Services 라이브러리를 사용합니다. 따라서 구글맵을 사용하려면 이 라이브러리를 추가해야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;middot; XML 레이아웃에 맵프래그먼트 추가하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 앱 화면에 지도를 넣으려면 XML 레이아웃에 맵프래그먼트를 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;middot; 소스 코드에서 내 위치로 지도 이동시키기&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 지도를 띄울 때 내 위치가 보여야 하므로 소스 코드에 지도를 내 위치에 맞추어 이동시키는 기능을 추가합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;middot; 매니페스트에 설정 추가하기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 지도를 사용하려면 권한이 필요합니다. 이 외에도 필요한 설정 정보를 매니페스트에 등록해야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;middot; 지도 API 키&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; 구글맵 서비스를 사용하려면 구글 콘솔에서 지도 API 키를 발급받아 앱의 매니페스트에 넣어주어야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;실습으로 넘어가 보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번에는 새로운 프로젝트를 만들어서 진행하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Google Play Services 라이브러리 사용 설정하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lfl2x/btqEDSvLTvT/H6reLmBsKVyKgKfqemwQV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lfl2x/btqEDSvLTvT/H6reLmBsKVyKgKfqemwQV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfl2x/btqEDSvLTvT/H6reLmBsKVyKgKfqemwQV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flfl2x%2FbtqEDSvLTvT%2FH6reLmBsKVyKgKfqemwQV0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;안드로이드 스튜디오 화면의 위쪽에 있는 SDK Manager 아이콘을 눌러 SDK 매니저 화면을 불러옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEuzen/btqEEMO8SNb/7C0WLf7WQyXkK3wEKcKh7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEuzen/btqEEMO8SNb/7C0WLf7WQyXkK3wEKcKh7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEuzen/btqEEMO8SNb/7C0WLf7WQyXkK3wEKcKh7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEuzen%2FbtqEEMO8SNb%2F7C0WLf7WQyXkK3wEKcKh7k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그런 다음 왼쪽의 메뉴에서 Appearance &amp;amp; Behavior -&amp;gt; System Settings -&amp;gt; Android SDK를 선택해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tQN6g/btqEEfquz0v/zgqRHcN2nYuKGAvokuRNok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tQN6g/btqEEfquz0v/zgqRHcN2nYuKGAvokuRNok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tQN6g/btqEEfquz0v/zgqRHcN2nYuKGAvokuRNok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtQN6g%2FbtqEEfquz0v%2FzgqRHcN2nYuKGAvokuRNok%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오른쪽 창에서 SDK Tools 탭을 선택하여 Google Play services 모듈이 설치되어 있는지 확인해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4Cys8/btqECMiugZm/T4Fyg6XRpmV1WywaiVjSaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4Cys8/btqECMiugZm/T4Fyg6XRpmV1WywaiVjSaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4Cys8/btqECMiugZm/T4Fyg6XRpmV1WywaiVjSaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4Cys8%2FbtqECMiugZm%2FT4Fyg6XRpmV1WywaiVjSaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저처럼 설치가 되어있지 않다면 모듈을 선택해서 Apply 버튼을 누르면 설치가 될 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;533&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qrUag/btqEBQsoSs3/mgc6FAFzCsJ7gy1cgVAjK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qrUag/btqEBQsoSs3/mgc6FAFzCsJ7gy1cgVAjK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qrUag/btqEBQsoSs3/mgc6FAFzCsJ7gy1cgVAjK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqrUag%2FbtqEBQsoSs3%2Fmgc6FAFzCsJ7gy1cgVAjK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;533&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;OK&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKPrTX/btqECuCosWt/Ng1LyExlIXQYeLl2dhknSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKPrTX/btqECuCosWt/Ng1LyExlIXQYeLl2dhknSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKPrTX/btqECuCosWt/Ng1LyExlIXQYeLl2dhknSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKPrTX%2FbtqECuCosWt%2FNg1LyExlIXQYeLl2dhknSk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;설치중,,,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;설치가 완료되면 Finish, OK 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;XML 레이아웃에 맵프래그먼트 추가하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;302&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLon3/btqECMbHruv/kQM6IEt1MDKZo6oI8KZWG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLon3/btqECMbHruv/kQM6IEt1MDKZo6oI8KZWG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLon3/btqECMbHruv/kQM6IEt1MDKZo6oI8KZWG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLon3%2FbtqECMbHruv%2FkQM6IEt1MDKZo6oI8KZWG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;302&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;File의 Project Structure를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;752&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PyMjR/btqEDZ9eXGr/kgbFctm2JnvQkqZOTzLKI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PyMjR/btqEDZ9eXGr/kgbFctm2JnvQkqZOTzLKI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PyMjR/btqEDZ9eXGr/kgbFctm2JnvQkqZOTzLKI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPyMjR%2FbtqEDZ9eXGr%2FkgbFctm2JnvQkqZOTzLKI0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;752&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 Dependencies의&amp;nbsp; app Module에서 + 버튼을 누르고 1 Library Dependency를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;705&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8TYUI/btqECubls8M/FT9ZqikJLI1tRnQHLea4i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8TYUI/btqECubls8M/FT9ZqikJLI1tRnQHLea4i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8TYUI/btqECubls8M/FT9ZqikJLI1tRnQHLea4i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8TYUI%2FbtqECubls8M%2FFT9ZqikJLI1tRnQHLea4i0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;705&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 상단에 play-services-maps 를 입력하고 Search 버튼을 누르면 검색 결과가 표시됩니다. 이를 선택한 채로 OK 버튼을 누릅니다. 그러면 Google play services 라이브러리를 사용할 수 있게 된겁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 XML 레이아웃을 만들어 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1591273311372&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;


    &amp;lt;fragment
        android:id=&quot;@+id/map&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot;
        class=&quot;com.google.android.gms.maps.SupportMapFragment&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/button&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;나의 위치&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;class 속성으로 SupportMapFragment라는 이름의 클래스가 할당되어 있습니다. 이 객체는 소스 코드에서 참조할 수 있으며 SupportMapFragment 안에 들어있는 GoogleMap 객체 위에 지도가 표시됩니다. GoogleMap 객체는 프래그먼트가 초기화된 후에 참조할 수 있는데, 레이아웃에 정의한 MapFragment 객체를 소스 코드에서 참조한 후 getMapAsync() 함수를 호출하면 GoogleMap 객체를 초기화하는데 비동기 방식으로 처리됩니다. 따라서 콜백 객체를 parameter로 전달한 후 초기화가 완료될 때 콜백 객체 안의 함수가 자동으로 호출되도록 만듭니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591275166671&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week5_2;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapsInitializer;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.pedro.library.AutoPermissions;
import com.pedro.library.AutoPermissionsListener;

public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    SupportMapFragment mapFragment;
    GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                Log.d(&quot;Map&quot;, &quot;지도 준비됨&quot;);
                map = googleMap;
            }
        });

        try {
            MapsInitializer.initialize(this);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLocationService();
            }
        });

        AutoPermissions.Companion.loadAllPermissions(this, 101);
    }

    public void startLocationService() {
        LocationManager manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        if (Build.VERSION.SDK_INT &amp;gt;= 23 &amp;amp;&amp;amp;
                ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location != null) {
            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            showCurrentLocation(latitude, longitude);
        }

        GPSListener gpsListener = new GPSListener();
        long minTime = 10000;
        float minDistance = 0;

        manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsListener);
        Toast.makeText(getApplicationContext(), &quot;내 위치확인 요청함&quot;, Toast.LENGTH_SHORT).show();
    }

    class GPSListener implements LocationListener {
        @Override
        public void onLocationChanged(Location location) {
            Double latitude = location.getLatitude();
            Double longitude = location.getLongitude();
            showCurrentLocation(latitude, longitude);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onProviderDisabled(String provider) {}
    }

    private void showCurrentLocation(Double latitude, Double longitude) {
        LatLng curPoint = new LatLng(latitude, longitude);
        map.animateCamera(CameraUpdateFactory.newLatLngZoom(curPoint, 15));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
    }

    @Override
    public void onDenied(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), &quot;permissions denied : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onGranted(int i, String[] strings) {
        Toast.makeText(getApplicationContext(), &quot;permissions granted : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml&lt;/p&gt;
&lt;pre id=&quot;code_1591275672219&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    package=&quot;com.example.week5_2&quot;&amp;gt;
    
    &amp;lt;permission android:name=&quot;com.example.week5_2.permission.MAPS_RECEIVE&quot;
        android:protectionLevel=&quot;signature&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;com.example.week5_2.permission.MAPS_RECEIVE&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;com.google.android.providers.gsf.permission.READ_GSERVICES&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&amp;gt;
    &amp;lt;uses-feature android:glEsVersion=&quot;0x00020000&quot;
        android:required=&quot;true&quot; /&amp;gt;

    &amp;lt;application
        android:allowBackup=&quot;true&quot;
        android:icon=&quot;@mipmap/ic_launcher&quot;
        android:label=&quot;@string/app_name&quot;
        android:roundIcon=&quot;@mipmap/ic_launcher_round&quot;
        android:supportsRtl=&quot;true&quot;
        android:theme=&quot;@style/AppTheme&quot;&amp;gt;
        
        &amp;lt;uses-library android:name=&quot;com.google.android.maps&quot; /&amp;gt;
        &amp;lt;uses-library android:name=&quot;org.apache.http.legacy&quot;
            android:required=&quot;false&quot; /&amp;gt;

        &amp;lt;meta-data
            android:name=&quot;com.google.android.maps.v2.API_KEY&quot;
            android:value=&quot;API_KEY를 입력해주세요&quot; /&amp;gt;

        &amp;lt;meta-data
            android:name=&quot;com.google.android.gms.version&quot;
            android:value=&quot;@integer/google_play_services_version&quot; /&amp;gt;
        
        &amp;lt;activity android:name=&quot;.MainActivity&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;

                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/activity&amp;gt;
    &amp;lt;/application&amp;gt;

&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;구글맵 API 키 발급받기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;마지막으로 구글맵 API 키를 발급받아 매니페스트 안에 입력해 보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;a href=&quot;http://console.developers.google.com&quot;&gt;http://console.developers.google.com&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591275774628&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Google Cloud Platform&quot; data-og-description=&quot;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&quot; data-og-host=&quot;accounts.google.com&quot; data-og-source-url=&quot;http://console.developers.google.com&quot; data-og-url=&quot;https://accounts.google.com/ServiceLogin?service=cloudconsole&amp;amp;passive=1209600&amp;amp;osid=1&amp;amp;continue=https://console.developers.google.com/?ref%3Dhttp://console.developers.google.com&amp;amp;followup=https://console.developers.google.com/?ref%3Dhttp://console.developers.google.com&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://console.developers.google.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://console.developers.google.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Google Cloud Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;사이트에 접속하여 구글 계정으로 로그인 해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4SZSo/btqEBmZrtcc/sOp9NZw78Jtca3Qn8ksFF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4SZSo/btqEBmZrtcc/sOp9NZw78Jtca3Qn8ksFF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4SZSo/btqEBmZrtcc/sOp9NZw78Jtca3Qn8ksFF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4SZSo%2FbtqEBmZrtcc%2FsOp9NZw78Jtca3Qn8ksFF0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;왼쪽의 라이브러리를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b14iY8/btqEEholqN2/d2qEQMfWZgwBVmdKZkfIf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b14iY8/btqEEholqN2/d2qEQMfWZgwBVmdKZkfIf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b14iY8/btqEEholqN2/d2qEQMfWZgwBVmdKZkfIf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb14iY8%2FbtqEEholqN2%2Fd2qEQMfWZgwBVmdKZkfIf1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고Maps SDK for Android를 사용할 수 있도록 해야합니다. 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WPJ7b/btqEBm6grwF/xkcQZAJVZmKbZ8Gwzfdo11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WPJ7b/btqEBm6grwF/xkcQZAJVZmKbZ8Gwzfdo11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WPJ7b/btqEBm6grwF/xkcQZAJVZmKbZ8Gwzfdo11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWPJ7b%2FbtqEBm6grwF%2FxkcQZAJVZmKbZ8Gwzfdo11%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사용을 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CngBc/btqEEgps4D2/KBIZAMjPFr6XFJakSPk69k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CngBc/btqEEgps4D2/KBIZAMjPFr6XFJakSPk69k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CngBc/btqEEgps4D2/KBIZAMjPFr6XFJakSPk69k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCngBc%2FbtqEEgps4D2%2FKBIZAMjPFr6XFJakSPk69k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사용 설정이 되면 왼쪽의 사용자 인증 정보 메뉴로 들어와줍니다. 그리고 + 사용자 인증 정보 만들기 버튼을 눌러주세요. (저는 이미 한 번 만들어서 화면이 )&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;555&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRi0jy/btqEC9kg7Z3/xI6r42lytwp2NvOrviQBF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRi0jy/btqEC9kg7Z3/xI6r42lytwp2NvOrviQBF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRi0jy/btqEC9kg7Z3/xI6r42lytwp2NvOrviQBF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRi0jy%2FbtqEC9kg7Z3%2FxI6r42lytwp2NvOrviQBF1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;555&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서는 API 키를 선택해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;503&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qfINe/btqEEgwcJgX/7A7sbrGBwjUK6kEvs0qBS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qfINe/btqEEgwcJgX/7A7sbrGBwjUK6kEvs0qBS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qfINe/btqEEgwcJgX/7A7sbrGBwjUK6kEvs0qBS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqfINe%2FbtqEEgwcJgX%2F7A7sbrGBwjUK6kEvs0qBS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;503&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;발급된 API 키를 복사해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;644&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tcvvy/btqEEfD5fhS/WHqDAqgEnI1YLaiqtlO8R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tcvvy/btqEEfD5fhS/WHqDAqgEnI1YLaiqtlO8R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tcvvy/btqEEfD5fhS/WHqDAqgEnI1YLaiqtlO8R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftcvvy%2FbtqEEfD5fhS%2FWHqDAqgEnI1YLaiqtlO8R0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;644&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml의 API_KEY value 값으로 방금 복사한 키를 넣어주면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 앱을 실행시키면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;290&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/no23E/btqEBnxgKgG/oN5PwsRPrEJY1xIu7NHdQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/no23E/btqEBnxgKgG/oN5PwsRPrEJY1xIu7NHdQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/no23E/btqEBnxgKgG/oN5PwsRPrEJY1xIu7NHdQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fno23E%2FbtqEBnxgKgG%2FoN5PwsRPrEJY1xIu7NHdQ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;290&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위치 권한을 허용하고 나의 위치 버튼을 클릭하면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;306&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EZuN4/btqECvVFX3S/BHLzTfEfImD8V5MtnabrhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EZuN4/btqECvVFX3S/BHLzTfEfImD8V5MtnabrhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EZuN4/btqECvVFX3S/BHLzTfEfImD8V5MtnabrhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEZuN4%2FbtqECvVFX3S%2FBHLzTfEfImD8V5MtnabrhK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;306&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;나의 위치를 지도가 나타내는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 지도에 아이콘 추가하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;아직은 기본 지도 외에는 아무것도 표시되어 있지 않습니다. 보통 앱을 만들 때는 현재 위치를 아이콘으로 표시하거나 주변의 카페 위치를 지도 위에 표시해 줄 수 있어야 사용자가 알고 싶어 하는 정보를 보여줄 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오버레이(Overlay)란?&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;일반적으로 지구상의 현실 공간을 지도로 표현할 때는 레이어(Layer)로 분리하고 각각의 레이어에는 유사한 속성을 가진 객체들을 넣어주게 됩니다. 구글맵에서는 이런 레이어들을 오버레이(Overlay)라고 부릅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;내 현재 위치 표시를 위한 오버레이 추가하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;방금 만든 프로젝트를 그대로 사용하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591277253822&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap googleMap) {
                Log.d(&quot;Map&quot;, &quot;지도 준비됨&quot;);
                map = googleMap;
                map.setMyLocationEnabled(true);
            }
        });
		...
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (map != null) {
            map.setMyLocationEnabled(true);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (map != null) {
            map.setMyLocationEnabled(false);
        }
    }
	...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;액티비티가 중지되거나 다시 시작할 떄 현재 위치를 표시하기 위해 setMyLocationEnabled(true) 함수를 호출합니다. 이 함수는 지도 초기화가 완료된 후에 호출되는 onMapReady() 함수 안에서 호출합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱을 실행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqFyVC/btqEBncUJCb/3Z9KVT3tDGGNnRIVlgruP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqFyVC/btqEBncUJCb/3Z9KVT3tDGGNnRIVlgruP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqFyVC/btqEBncUJCb/3Z9KVT3tDGGNnRIVlgruP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqFyVC%2FbtqEBncUJCb%2F3Z9KVT3tDGGNnRIVlgruP1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;내 위치가 뜨는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 마커를 사용해 내 위치 표시하기&lt;/h2&gt;
&lt;p&gt;아이콘을 사용해 원하는 위치를 포인트로 쉽게 표시할 수 있는 방법은 마커(Marker)를 만들어 추가하는 것입니다. 마커는 지도 위에 표시되는 아이콘이라고 생각하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;drawable 폴더에 원하는 아이콘(사진)을 추가해주세요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1591277885978&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {
    ...
    
    MarkerOptions myLocationMarker;

    ...

    private void showCurrentLocation(Double latitude, Double longitude) {
        ...
        showLocationMarker(curPoint);
    }
    
    private void showLocationMarker(LatLng curPoint) {
        if (myLocationMarker == null) {
            myLocationMarker = new MarkerOptions();
            myLocationMarker.position(curPoint);
            myLocationMarker.title(&quot;내 위치\n&quot;);
            myLocationMarker.snippet(&quot;GPS로 확인한 위치&quot;);
            myLocationMarker.icon(BitmapDescriptorFactory.fromResource(R.drawable.mylocation));
            map.addMarker(myLocationMarker);
        } else {
            myLocationMarker.position(curPoint);
        }
    }
	...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱일 실행하고 나의 위치를 확인해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;265&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vOBUI/btqEDThclo5/WMxlsXLf3e341lySGj14j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vOBUI/btqEDThclo5/WMxlsXLf3e341lySGj14j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vOBUI/btqEDThclo5/WMxlsXLf3e341lySGj14j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvOBUI%2FbtqEDThclo5%2FWMxlsXLf3e341lySGj14j1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;265&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;마커가 뜨는 것을 확인할 수 있습니다,,,,, (사이즈가 너무 크네요,, 여러분들은 사이즈 작은 사진 구해오세욥,,,)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;센서 이해하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;센서는 앱의 핵심이라기보다는 부가적으로 사용성으로 높이는데 큰 도움을 주는 요소입니다. 안드로이드에서는 다양한 표준 센서들을 지원합니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;센서 이름&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;상수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;가속 센서(Accelerometer)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;TYPE_ACCELEROMETER&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;가속도 감지, 외부의 충격량과 방향 감지(단위: m/s^2)(중력 + 선형가속)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;자이로스코프 센서(Gyroscope)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_GYROSCOPE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;회전 정보 감지, 다양한 축을 따른 회전각 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;중력 센서(Gravity)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_GRAVITY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;축의 방향과 중력 감지(단위 : m/x^2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;조도 센서(Light)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_LIGHT&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;빛의 세기 감지(단위 : lux)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;선형 가속 센서(Linear Acceleration)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_LINEAR_ACCELERATION&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;각 축에 따른 가속도를 감지하는 3차원 벡터(단위 : m/s^2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;근접 센서(Proximity)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_PROXIMITY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;근접한 물체와의 거리 감지(단위 : cm)&lt;br /&gt;단말에 따라 가깝거나 먼 정도만 표시할 수도 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;온도 센서(Temperature)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_TEMPERATURE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;온도 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;방향 센서(Orientation)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TYPE_ORIENTATION&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;방향각 감지(단위 : degree)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>GPS</category>
      <category>구글맵</category>
      <category>센서</category>
      <category>안드로이드스튜디오</category>
      <category>위치</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/24</guid>
      <comments>https://rina214.tistory.com/24#entry24comment</comments>
      <pubDate>Thu, 4 Jun 2020 19:56:07 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 서비스와 수신자 이해하기</title>
      <link>https://rina214.tistory.com/23</link>
      <description>&lt;p&gt;Week4&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이때까지는 화면을 만들고 화면을 구성할 때 필요한 기본적인 내용들을 살펴봤었습니다.&lt;/p&gt;
&lt;p&gt;하지만 앱은 화면을 구성하는 요소뿐만 아니라 다른 구성 요소도 많이 필요합니다.&lt;/p&gt;
&lt;p&gt;그 중 대표적인 요소가 &lt;b&gt;서비스(Service)&lt;/b&gt;와 &lt;b&gt;수신자(Broadcast Receiver)&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;서비스(Service)&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;service는 화면에서 실행되는 것이 아니라 화면 뒤(Background)에서 실행되는 앱의 구성요소입니다.&lt;/p&gt;
&lt;p&gt;화면이 없으므로 액티비티와 동작하는 방식이 다르고 인텐트(intent) 안에 포함된 메시지를 주고 받을 때 사용합니다.&lt;/p&gt;
&lt;p&gt;activity를 만들면 Manifest에 등록했던 것처럼 새로 만든 service도 Manifest에 추가해주어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 service를 실행하려면 MainActivity에서 startService() 함수를 호출하면 됩니다.&lt;/p&gt;
&lt;p&gt;service를 시작시키기 위해 startService() 함수를 호출할 때는 intent 객체를 parameter로 전달합니다.&lt;/p&gt;
&lt;p&gt;그리고 service가 실행 중일 때 또 startService() 함수를 호출하면 service는 이미 메모리에 만들어진 상태로 유지되지만 service 시작 목적 이외로 intent를 전달하는 목적으로도 자주 사용됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실습으로 넘어가보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;587&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bevEyh/btqEvignS4H/fjcmPMqYeN3qxJlbcjzqM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bevEyh/btqEvignS4H/fjcmPMqYeN3qxJlbcjzqM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bevEyh/btqEvignS4H/fjcmPMqYeN3qxJlbcjzqM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbevEyh%2FbtqEvignS4H%2FfjcmPMqYeN3qxJlbcjzqM1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;587&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 &lt;b&gt;app&lt;/b&gt; 을 마우스 우클릭하여 &lt;b&gt;New -&amp;gt; Service -&amp;gt; Service&lt;/b&gt;를 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;638&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rbers/btqEtNu6r6K/bgRbnqpRz0lBeVYQLXV4k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rbers/btqEtNu6r6K/bgRbnqpRz0lBeVYQLXV4k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rbers/btqEtNu6r6K/bgRbnqpRz0lBeVYQLXV4k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frbers%2FbtqEtNu6r6K%2FbgRbnqpRz0lBeVYQLXV4k1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;638&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 위와 같은 대화상자가 등장하는데 기본값으로 두고 &lt;b&gt;Finish&lt;/b&gt; 버튼을 누르겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmXQ9A/btqEtNBTqGW/m5Kg2KQhaf103ijK3XtQvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmXQ9A/btqEtNBTqGW/m5Kg2KQhaf103ijK3XtQvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmXQ9A/btqEtNBTqGW/m5Kg2KQhaf103ijK3XtQvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmXQ9A%2FbtqEtNBTqGW%2Fm5Kg2KQhaf103ijK3XtQvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 MyService.java 파일이 생성됨과 동시에&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lgSdC/btqEtEeadCP/ce6TGLfDHSRj7GbyhOJf50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lgSdC/btqEtEeadCP/ce6TGLfDHSRj7GbyhOJf50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lgSdC/btqEtEeadCP/ce6TGLfDHSRj7GbyhOJf50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlgSdC%2FbtqEtEeadCP%2Fce6TGLfDHSRj7GbyhOJf50%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml 파일에 &amp;lt;service&amp;gt; 태그가 자동으로 추가된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 MyService.java 파일에는 기본적으로 onBind() 함수만 있습니다.&lt;/p&gt;
&lt;p&gt;하지만 service의 수명주기를 관리하기 위하여 onCreate(), onDestroy(), 그리고 intent 객체를 전달받기 위한 onStartCommand() 함수를 추가하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;602&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuKqZU/btqEsYc6iCY/hQxlH3YNpkVemaykqKkNKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuKqZU/btqEsYc6iCY/hQxlH3YNpkVemaykqKkNKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuKqZU/btqEsYc6iCY/hQxlH3YNpkVemaykqKkNKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuKqZU%2FbtqEsYc6iCY%2FhQxlH3YNpkVemaykqKkNKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;602&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;MyService class 안에 마우스를 우클릭하여 &lt;b&gt;Generate&lt;/b&gt;를 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;183&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVoY4/btqEuYbCfqK/LsvEJrxAqwFq4KcwzAXwsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVoY4/btqEuYbCfqK/LsvEJrxAqwFq4KcwzAXwsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVoY4/btqEuYbCfqK/LsvEJrxAqwFq4KcwzAXwsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVoY4%2FbtqEuYbCfqK%2FLsvEJrxAqwFq4KcwzAXwsK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;183&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 &lt;b&gt;Override Methods&lt;/b&gt;를 눌러줍니다. (&lt;b&gt;Ctrl + O&lt;/b&gt;하면 바로 열려요!)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;333&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHRfzc/btqEttRpzii/S3ik60dNNal35OBaxQei30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHRfzc/btqEttRpzii/S3ik60dNNal35OBaxQei30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHRfzc/btqEttRpzii/S3ik60dNNal35OBaxQei30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHRfzc%2FbtqEttRpzii%2FS3ik60dNNal35OBaxQei30%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;333&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ctrl&lt;/b&gt;을 누른 상태로 &lt;b&gt;onCreate(), onDestroy(), onStartCommand()&lt;/b&gt;를 눌러주시면 한꺼번에 추가할 수 있습니다. &lt;b&gt;OK&lt;/b&gt; 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nwwSj/btqEtNPuvvY/OjiynhZboBmaHelqdqO6qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nwwSj/btqEtNPuvvY/OjiynhZboBmaHelqdqO6qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nwwSj/btqEtNPuvvY/OjiynhZboBmaHelqdqO6qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnwwSj%2FbtqEtNPuvvY%2FOjiynhZboBmaHelqdqO6qk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 자동으로 함수가 추가된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 activity_main.xml 파일로 가서 입력상자와 버튼을 하나씩 만들겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590661002084&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;
    android:orientation=&quot;vertical&quot;
    android:gravity=&quot;center&quot;&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/editText&quot;
        android:layout_width=&quot;200dp&quot;
        android:layout_height=&quot;wrap_content&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/btn_service&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;service로 보내기&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;194&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lMHXk/btqEuYbCE8h/2ZQ0EyXMBtcJwJkoXI67PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lMHXk/btqEuYbCE8h/2ZQ0EyXMBtcJwJkoXI67PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMHXk/btqEuYbCE8h/2ZQ0EyXMBtcJwJkoXI67PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlMHXk%2FbtqEuYbCE8h%2F2ZQ0EyXMBtcJwJkoXI67PK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;194&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'service로 보내기'라는 버튼을 누르면 입력상자에 입력한 글자를 service에 전달하도록 만들 것입니다.&lt;/p&gt;
&lt;p&gt;데이터를 service에 전달하려면 startService() 함수를 사용하며 intent 안에 부가 데이터를 추가해서 전달하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590661503114&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week4;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText editText;
    Button btn_service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        btn_service = findViewById(R.id.btn_service);
        btn_service.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = editText.getText().toString();
                Intent intent = new Intent(getApplicationContext(), MyService.class);
                intent.putExtra(&quot;command&quot;, &quot;show&quot;);
                intent.putExtra(&quot;name&quot;, name);
                startService(intent);
            }
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;위와 같이 입력해주세요.&lt;/p&gt;
&lt;p&gt;이 코드를 설명하자면&lt;/p&gt;
&lt;p&gt;intent 안에 두 개의 부가 데이터를 넣었습니다.&lt;/p&gt;
&lt;p&gt;command는 서비스 쪽으로 전달한 intent 객체의 데이터가 어떤 목적으로 사용되는지를 구별하기 위해 넣은 것입니다.&lt;/p&gt;
&lt;p&gt;name은 입력상자에서 가져온 문자를 전달하기 위한 것입니다.&lt;/p&gt;
&lt;p&gt;이 두 개의 부가 데이터를 담은 intent 객체를 startService() 함수에 담았습니다. 이는 MyService에서 onStartCommand() 함수로 전달될 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MyService.java&lt;/p&gt;
&lt;pre id=&quot;code_1590662130404&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week4;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import static android.content.ContentValues.TAG;

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException(&quot;Not yet implemented&quot;);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, &quot;onCreate() 호출됨&quot;);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, &quot;onStartCommand() 호출됨&quot;);

        if (intent == null) {
            return Service.START_STICKY;
        } else {
            String command = intent.getStringExtra(&quot;command&quot;);
            String name = intent.getStringExtra(&quot;name&quot;);

            Log.d(TAG, &quot;command : &quot; + command + &quot;, name : &quot; + name);

            for (int i = 0; i &amp;lt; 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {};
                Log.d(TAG, &quot;Waiting &quot; + i + &quot;seconds.&quot;);
            }
        }
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;전달 받은 데이터를 출력하기 위해 Log.d() 함수를 이용했습니다.&lt;/p&gt;
&lt;p&gt;실무에서는 토스트 메시지보다 로그를 더 많이 사용하니 알아두는 것이 좋습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;코드에서 intent가 null이면 Service.START_STICKY를 반환합니다. 이는 service가 비정상 종료되었다는 의미이므로 시스템이 자동으로 재시작합니다. 만약 자동으로 재시작하지 않도록 만들고 싶다면 다른 상수를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;null이 아니라면 intent로부터 부가 데이터를 받아 출력하고 5초동안 1초에 한 번씩 로그를 출력하도록 했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;service가 서버 역할을 하면서 activity와 연결될 수 있도록 만드는 것을 바인딩(Binding)이라고 합니다. 이를 위해서는 onBind() 함수를 재정의해야 하지만 여기서는 binding 기능을 사용하지 않으므로 그냥 놔두고 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한 번 실행시켜보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;319&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MjSGv/btqEt4pV7nl/mykKcCEFBX6nvWk0PoA9Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MjSGv/btqEt4pV7nl/mykKcCEFBX6nvWk0PoA9Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MjSGv/btqEt4pV7nl/mykKcCEFBX6nvWk0PoA9Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMjSGv%2FbtqEt4pV7nl%2FmykKcCEFBX6nvWk0PoA9Q1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;319&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;'Rina' 라고 입력하고 'service로 보내기' 버튼을 누르면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yoPrD/btqEt6uxKrX/DWgNUEQuPaWuoAF0cNIqP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yoPrD/btqEt6uxKrX/DWgNUEQuPaWuoAF0cNIqP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yoPrD/btqEt6uxKrX/DWgNUEQuPaWuoAF0cNIqP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyoPrD%2FbtqEt6uxKrX%2FDWgNUEQuPaWuoAF0cNIqP0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;안드로이드 스튜디오에서 다음과 같이 로그가 나타나게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 onStartCommand()에서 activity 쪽으로 intent를 전달하고 화면에 띄워보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MyService.java 중 onStartCommand 함수&lt;/p&gt;
&lt;pre id=&quot;code_1590666043360&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG, &quot;onStartCommand() 호출됨&quot;);

        if (intent == null) {
            return Service.START_STICKY;
        } else {
            String command = intent.getStringExtra(&quot;command&quot;);
            String name = intent.getStringExtra(&quot;name&quot;);

            Log.d(TAG, &quot;command : &quot; + command + &quot;, name : &quot; + name);

            for (int i = 0; i &amp;lt; 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (Exception e) {};
                Log.d(TAG, &quot;Waiting &quot; + i + &quot;seconds.&quot;);
            }
            Intent showIntent = new Intent(getApplicationContext(), MainActivity.class);
            showIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
                                Intent.FLAG_ACTIVITY_SINGLE_TOP |
                                Intent.FLAG_ACTIVITY_CLEAR_TOP);
            showIntent.putExtra(&quot;command&quot;, &quot;show&quot;);
            showIntent.putExtra(&quot;name&quot;, name + &quot; from service.&quot;);
            startActivity(showIntent);
        }
        return super.onStartCommand(intent, flags, startId);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이번엔 intent에 flag를 추가했습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;FLAG_ACTIVITY_NEW_TASK&lt;/b&gt;는 새로운 태스크(Task)를 생성합니다. 서비스는 화면이 없기 때문에 화면이 없는 서비스에서 화면이 있는 액티비티를 띄우려면 새로운 태스크를 만들어야 하기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;FLAG_ACTIVITY_SINGLE_TOP&lt;/b&gt;과 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;FLAG_ACTIVITY_CLEAR_TOP&lt;/b&gt;은 MainActivity 객체가 이미 메모리에 만들어져 있을 때 재사용하도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;전달 받은 인텐트를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;MainActivity에서 처리해봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590666646884&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week4;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText editText;
    Button btn_service;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        btn_service = findViewById(R.id.btn_service);
        btn_service.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = editText.getText().toString();
                Intent intent = new Intent(getApplicationContext(), MyService.class);
                intent.putExtra(&quot;command&quot;, &quot;show&quot;);
                intent.putExtra(&quot;name&quot;, name);
                startService(intent);
            }
        });

        Intent passedIntent = getIntent();
        processIntent(passedIntent);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        processIntent(intent);
        super.onNewIntent(intent);
    }

    private void processIntent(Intent intent) {
        if (intent != null) {
            String command = intent.getStringExtra(&quot;command&quot;);
            String name = intent.getStringExtra(&quot;name&quot;);
            Toast.makeText(this, &quot;command : &quot; + command + &quot;, name : &quot; + name, Toast.LENGTH_SHORT).show();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;MainActivity가 메모리에 만들어져 있지 않은 상태에서 처음 만들어진다면 onCreate()에 있는 getIntent() 함수를 통해 intent 객체를 참조하고 MainActivity가 메모리에 이미 만들어진 상태라면 onNewIntent() 함수가 호출되어 getIntent()를 수행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행시켜 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200528-210952_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IjkUp/btqEuA3ePBV/CbzRjDNDok8KaeScEnJgI1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IjkUp/btqEuA3ePBV/CbzRjDNDok8KaeScEnJgI1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IjkUp/btqEuA3ePBV/CbzRjDNDok8KaeScEnJgI1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/IjkUp/btqEuA3ePBV/CbzRjDNDok8KaeScEnJgI1/img.gif&quot; data-filename=&quot;SmartSelect_20200528-210952_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼을 누르고 5초 기다리고 나면 토스트 메시지를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;요즘 앱들은 서비스를 자주 사용하니 액티비티에서 서비스로, 혹은 서비스에서 액티비티로 데이터를 전달하는 방법을 잘 알아두어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;수신자(Broadcast Receiver)&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;브로드캐스팅(Broadcasting)&lt;/b&gt;이란 메시지를 여러 객체에 전달하는 것을 말합니다.&lt;/p&gt;
&lt;p&gt;예를 들어,&amp;nbsp; 문자를 받았을 때 이 문자를 SMS 수신 앱에 알려줘야 한다면 브로드캐스팅으로 전달하면 됩니다.&lt;/p&gt;
&lt;p&gt;메시지는 단말 전체에 적용될 수 있고 이를 '글로벌 이벤트(global event)'라고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;브로드캐스트 수신자에는 &lt;b&gt;onReceiver()&lt;/b&gt; 함수를 정의해야 합니다. 이 함수는 원하는 브로드캐스트 메시지가 도착하면 자동으로 호출됩니다. 하지만 시스템의 모든 메시지를 받을 수는 없습니다.&lt;/p&gt;
&lt;p&gt;원하는 메시지만 받기 위해서는 &lt;b&gt;인텐트 필터&lt;/b&gt;를 사용하여 시스템에 등록하면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실습해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;660&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKHVLk/btqEuYivJ5E/Z6hA3WTCY201QiK3QEi810/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKHVLk/btqEuYivJ5E/Z6hA3WTCY201QiK3QEi810/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKHVLk/btqEuYivJ5E/Z6hA3WTCY201QiK3QEi810/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKHVLk%2FbtqEuYivJ5E%2FZ6hA3WTCY201QiK3QEi810%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;660&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;app&lt;/b&gt;을 마우스 우클릭하여 &lt;b&gt;New -&amp;gt; Other -&amp;gt; Broadcast Receiver&lt;/b&gt;를 선택해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이름은 MyReceiver 그대로하고 &lt;b&gt;Finish&lt;/b&gt; 누르겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqctgk/btqEsXk1Apq/eGovybIPXB7sFobIbqug6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqctgk/btqEsXk1Apq/eGovybIPXB7sFobIbqug6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqctgk/btqEsXk1Apq/eGovybIPXB7sFobIbqug6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqctgk%2FbtqEsXk1Apq%2FeGovybIPXB7sFobIbqug6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 MyReceiver.java 파일이 생성되고 manifest에도 &amp;lt;receiver&amp;gt; 태그가 생성됩니다. 그리고 manifest에 코드를 추가하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590670606710&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    package=&quot;com.example.week4&quot;&amp;gt;
    
    &amp;lt;uses-permission android:name=&quot;android.permission.RECEIVE_SMS&quot;/&amp;gt;

    &amp;lt;application
        android:allowBackup=&quot;true&quot;
        android:icon=&quot;@mipmap/ic_launcher&quot;
        android:label=&quot;@string/app_name&quot;
        android:roundIcon=&quot;@mipmap/ic_launcher_round&quot;
        android:supportsRtl=&quot;true&quot;
        android:theme=&quot;@style/AppTheme&quot;&amp;gt;
        &amp;lt;receiver
            android:name=&quot;.MyReceiver&quot;
            android:enabled=&quot;true&quot;
            android:exported=&quot;true&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.provider.Telephony.SMS_RECEIVED&quot;/&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/receiver&amp;gt;

        &amp;lt;service
            android:name=&quot;.MyService&quot;
            android:enabled=&quot;true&quot;
            android:exported=&quot;true&quot; /&amp;gt;

        &amp;lt;activity android:name=&quot;.MainActivity&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;

                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/activity&amp;gt;
    &amp;lt;/application&amp;gt;

&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;receiver&amp;gt; 태그 안에 &amp;lt;intent-filter&amp;gt; 태그를 넣으면 어떤 인텐트를 받을 것인지 지정합니다.&lt;/p&gt;
&lt;p&gt;&amp;lt;intent-filter&amp;gt; 태그 안에 &amp;lt;action&amp;gt; 태그를 추가하고 name 속성 값으로 android.provider.Telephony.SMS_RECEIVED를 넣었는데 이는 SMS 메시지가 들어간 인텐트를 구분하기 위한 액션 정보입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 이 앱에서 SMS를 수신하려면 RECEIVE_SMS라는 권한이 있어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;lt;application&amp;gt; 태그 위에 RECEIVE_SMS 권한을 추가해주세요.&lt;/p&gt;
&lt;p&gt;그런데 이 권한은 위험 권한입니다. 위험 권한인 경우는 소스 파일에서 앱 실행 후에 사용자가 권한을 부여할 수 있도록 별도의 코드가 추가되어야 합니다. 지금은 외부 라이브러리를 사용하여 간단하게 위험 권한을 추가하는 코드를 넣겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ssjnJ/btqEtFEhi2X/5w7saRfiSLEAovBAh6sk70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ssjnJ/btqEtFEhi2X/5w7saRfiSLEAovBAh6sk70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ssjnJ/btqEtFEhi2X/5w7saRfiSLEAovBAh6sk70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FssjnJ%2FbtqEtFEhi2X%2F5w7saRfiSLEAovBAh6sk70%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Gradle Script의 build.gradle (Module: app)을 수정하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpeRft/btqEvwlmgUE/fqCewJ9kvTqsOkxy7h7WK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpeRft/btqEvwlmgUE/fqCewJ9kvTqsOkxy7h7WK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpeRft/btqEvwlmgUE/fqCewJ9kvTqsOkxy7h7WK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpeRft%2FbtqEvwlmgUE%2FfqCewJ9kvTqsOkxy7h7WK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;build.gradle (Module: app)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590673878570&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion &quot;29.0.3&quot;

    defaultConfig {
        applicationId &quot;com.example.week4&quot;
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName &quot;1.0&quot;

        testInstrumentationRunner &quot;androidx.test.runner.AndroidJUnitRunner&quot;
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

allprojects {
    repositories {
        maven {url 'https://jitpack.io'}
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    implementation 'com.github.pedroSG94:AutoPermissions:1.0.3'
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;이렇게 코드를 추가해주시고 상단에 Sync Now를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 MyReceiver.java 파일의 코드를 작성해봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MyReceiver.java&lt;/p&gt;
&lt;pre id=&quot;code_1590672734277&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week4;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;

import java.util.Date;

import static android.content.ContentValues.TAG;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Log.i(TAG, &quot;onReceive() 함수 호출&quot;);
        Bundle bundle = intent.getExtras(); //intent에서 Bundle 객체 가져옴
        SmsMessage[] messages = parseSmsMessage(bundle);


        if (messages != null &amp;amp;&amp;amp; messages.length &amp;gt; 0) {
            String sender = messages[0].getOriginatingAddress();
            Log.i(TAG, &quot;SMS sender : &quot; + sender);

            String contents = messages[0].getDisplayMessageBody();
            Log.i(TAG, &quot;SMS contents : &quot; + contents);

            Date receivedDate = new Date(messages[0].getTimestampMillis());
            Log.i(TAG, &quot;SMS received date : &quot; + receivedDate.toString());
        }
    }
    
    private SmsMessage[] parseSmsMessage(Bundle bundle) {
        Object[] objs = (Object[]) bundle.get(&quot;pdus&quot;);
        SmsMessage[] messages = new SmsMessage[objs.length];
        
        int smsCount = objs.length;
        for (int i = 0; i &amp;lt; smsCount; i++) {
            if (Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.M) {
                String format = bundle.getString(&quot;format&quot;);
                messages[i] = SmsMessage.createFromPdu((byte[])objs[i], format);
            } else {
                messages[i] = SmsMessage.createFromPdu((byte[])objs[i]);
            }
        }
        return messages;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 SMS를 받으면 onReceive() 함수가 자동으로 호출됩니다. 그리고 parameter로 전달되는 Intent 객체 안에 SMS 데이터가 들어 있습니다. intent 객체 안에 Bundle 객체가 들어있는데 이 안에도 부가 데이터가 들어 있습니다.&lt;/p&gt;
&lt;p&gt;parseSmsMessage 함수를 호출하면 SMS 메시지 객체를 만들어 주는데 createFromPdu() 함수를 이용하여 Bundle 객체를 SmsMessage 객체로 변환하면 SMS 데이터를 받아올 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;getOriginatingAddress() 함수는 발신자 번호를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;getMessageBody()는 문자 내용을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;getTimestampMillis()를 사용하면 SMS를 받은 시각도 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Build.VERSION.SDK_INT는 단말의 OS 버전을 확인할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Build.VERSION_CODES에는 안드로이드 OS 버전별로 상수가 정의되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번엔 위험 권한을 추가하는 코드를 작성하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MainActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590674263664&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class MainActivity extends AppCompatActivity implements AutoPermissionsListener {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...

        AutoPermissions.Companion.loadAllPermissions(this, 101);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        AutoPermissions.Companion.parsePermissions(this, requestCode, permissions, this);
    }

    @Override
    public void onDenied(int i, String[] strings) {
        Toast.makeText(this, &quot;permissions denied : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onGranted(int i, String[] strings) {
        Toast.makeText(this, &quot;permissions granted : &quot; + strings.length, Toast.LENGTH_SHORT).show();
    }

...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 코드는 위험 권한을 자동으로 부여하는 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱을 실행하면 권한을 요청하는 대화상자가 표시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;324&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPal0v/btqEtGb2X59/UMSwY7hvc34Zz24cvoc6xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPal0v/btqEtGb2X59/UMSwY7hvc34Zz24cvoc6xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPal0v/btqEtGb2X59/UMSwY7hvc34Zz24cvoc6xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPal0v%2FbtqEtGb2X59%2FUMSwY7hvc34Zz24cvoc6xk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;324&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 허용 버튼을 누르면 권한이 승인되고 SMS 받을 준비가 된 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SMS는 이동통신아에 연결되어 있어야 다른 단말로부터 수신할 수 있습니다. 따라서 에뮬레이터로는 실제 SMS 수신이 불가능하지만 가상으로 SMS를 전송할 수 있는 기능이 들어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;286&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8jx1C/btqEvxEzWXS/7R9PNpP9msXCiQ2wkyWjgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8jx1C/btqEvxEzWXS/7R9PNpP9msXCiQ2wkyWjgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8jx1C/btqEvxEzWXS/7R9PNpP9msXCiQ2wkyWjgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8jx1C%2FbtqEvxEzWXS%2F7R9PNpP9msXCiQ2wkyWjgK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;286&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 ... 버튼을 클릭해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;643&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/usQAd/btqEuX425rd/o0b5ssAdrtOdtKYZkfzKo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/usQAd/btqEuX425rd/o0b5ssAdrtOdtKYZkfzKo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/usQAd/btqEuX425rd/o0b5ssAdrtOdtKYZkfzKo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FusQAd%2FbtqEuX425rd%2Fo0b5ssAdrtOdtKYZkfzKo1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;643&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 Phone에 들어가셔서 SMS message 내용에 Hello!라고 입력하고 SEND MESSAGE를 보내면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b38RzK/btqEvwyT9r8/VdjB0xieJF3EhvvfIDfvNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b38RzK/btqEvwyT9r8/VdjB0xieJF3EhvvfIDfvNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b38RzK/btqEvwyT9r8/VdjB0xieJF3EhvvfIDfvNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb38RzK%2FbtqEvwyT9r8%2FVdjB0xieJF3EhvvfIDfvNk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 Hello!라는 메시지가 온 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;603&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/38mxk/btqEtvhy3Jd/T0QJCkkzeULEeLXbDqIAd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/38mxk/btqEtvhy3Jd/T0QJCkkzeULEeLXbDqIAd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/38mxk/btqEtvhy3Jd/T0QJCkkzeULEeLXbDqIAd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F38mxk%2FbtqEtvhy3Jd%2FT0QJCkkzeULEeLXbDqIAd0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;603&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;동시에 안드로이드 스튜디오의 로그창에는 onReceive() 함수가 호출되고 SMS 메시지 정보들이 출력되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;위험 권한(Dangerous Permission)&lt;/h2&gt;
&lt;p&gt;위의 실습에서 위험 권한에 대해 살짝 언급했습니다.&lt;/p&gt;
&lt;p&gt;안드로이드의 마시멜로 버전부터 일반 권한(Normal Permission)과 위험 권한(Dangerous Permission)으로 나뉘어져 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;인터넷을 사용할 때 부여하는 INTERNET 권한은 일반 권한입니다. 앱을 설치할 때 사용자에게 권한이 부여되어야 함을 알려주고 설치할 것인지를 물어봅니다. 사용자가 설명을 보고 수락하면 앱이 설치되고 앱에는 INTERNET 권한이 부여됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;하지만 위험 권한인 RECEIVE_SMS는 설치 시에 부여한 권한은 의미가 없고 실행 시에 사용자에게 권한을 부여할 지 물어봅니다. 사용자가 권한을 부여하지 않으면 해당 기능은 동작하지 않습니다. 앱을 설치해도 권한에 따라 실행할 수 있는 기능에 제약이 생기는 것입니다. 안드로이드 앱을 주로 사용하다보면 위치, 카메라, 마이크, 갤러리, SMS 등 권한을 물어보는 알림을 받은 적이 있을겁니다. 모두 위험 권한인 것을 알 수 있습니다.&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>broadcast receiver</category>
      <category>Dangerous Permission</category>
      <category>Service</category>
      <category>안드로이드스튜디오</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/23</guid>
      <comments>https://rina214.tistory.com/23#entry23comment</comments>
      <pubDate>Thu, 28 May 2020 23:22:56 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 여러 화면 간 전환하기</title>
      <link>https://rina214.tistory.com/22</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;Inflation이란?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;인플레이션(inflation)&lt;/span&gt;&lt;span&gt;이란 &lt;/span&gt;&lt;span&gt;xml &lt;/span&gt;&lt;span&gt;레이아웃의 내용이 메모리에 객체화 되는 과정입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이렇게 말하면 어렵게 들릴 수 있으니까 쉽게 말하자면 자바코드에서 &lt;/span&gt;&lt;span&gt;setContentView()&lt;/span&gt;&lt;span&gt;가 &lt;/span&gt;&lt;span&gt;xml &lt;/span&gt;&lt;span&gt;파일이랑 연결시키는 역할을 한다했잖아요&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그래서 &lt;/span&gt;&lt;span&gt;xml &lt;/span&gt;&lt;span&gt;파일이랑 연결하는 이 과정이 인플레이션이라고 생각하면 돼요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그래서 &lt;/span&gt;&lt;span&gt;setContentView()&lt;/span&gt;&lt;span&gt;하기전에 &lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;에서 &lt;/span&gt;&lt;span&gt;findViewById&lt;/span&gt;&lt;span&gt;를 하려고하면 오류가 납니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그리고 화면 전체에 보여줄 xml 레이아웃이 아니라 부분 레이아웃을 소스 파일에 로딩하여 보여줄 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그 역할을 하는게 &lt;b&gt;LayoutInflater&lt;/b&gt;라는 클래스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실습 : LayoutInflater로 부분화면 만들기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590245255260&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/btn_inflater&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;inflater&quot; /&amp;gt;

    &amp;lt;LinearLayout
        android:id=&quot;@+id/container&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;vertical&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 res/layout 폴더를 우클릭하여&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;321&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fv1QJ/btqEnH8NSSp/j9B7E3Fj1kRGxx102MNSfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fv1QJ/btqEnH8NSSp/j9B7E3Fj1kRGxx102MNSfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fv1QJ/btqEnH8NSSp/j9B7E3Fj1kRGxx102MNSfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFv1QJ%2FbtqEnH8NSSp%2Fj9B7E3Fj1kRGxx102MNSfk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;321&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;605&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nF872/btqEmLYoidw/WQKzEoQjRUK5Iwrcze7emK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nF872/btqEmLYoidw/WQKzEoQjRUK5Iwrcze7emK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nF872/btqEmLYoidw/WQKzEoQjRUK5Iwrcze7emK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnF872%2FbtqEmLYoidw%2FWQKzEoQjRUK5Iwrcze7emK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;605&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;새로운 Layout Resource File을 만들어 줍니다. xml 이름은 sub로 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;sub.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590245504324&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;부분화면&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sub.xml 파일이 부분화면 역할을 할 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590245563761&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week3;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    Button btn_inflater;
    LinearLayout container;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_inflater = findViewById(R.id.btn_inflater);
        container = findViewById(R.id.container);
        
        btn_inflater.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                inflater.inflate(R.layout.sub, container, true);
            }
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LayoutInflater가 R.layout.sub.xml을 container라는 LinearLayout에 추가해주는 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행시켜 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200523-235538_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKULa/btqEmKSIQMR/DkKZUknnC8ZiMSXSMu6wO1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKULa/btqEmKSIQMR/DkKZUknnC8ZiMSXSMu6wO1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKULa/btqEmKSIQMR/DkKZUknnC8ZiMSXSMu6wO1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/kKULa/btqEmKSIQMR/DkKZUknnC8ZiMSXSMu6wO1/img.gif&quot; data-filename=&quot;SmartSelect_20200523-235538_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼을 누를 때마다 부분화면이 생성되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;화면 전환하기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;앱에는 여러 화면으로 구성되어 있고 화면을 전환하며 실행됩니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;화면은 액티비티로 구현합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;즉&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;화면을 띄우거나 닫는 과정은 액티비티를 전환하는 것과 같습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;따라서 &lt;b&gt;액티비티에 대해서 공부하는 것은 중요&lt;/b&gt;합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;액티비티를 소스코드에서 띄울 때 &lt;/span&gt;&lt;b&gt;&lt;span&gt;startActicity() &lt;/span&gt;&lt;/b&gt;&lt;span&gt;함수를 사용하면 되는데 이 함수는 단순히 액티비티를 띄워 화면에 보이도록 하는 기능입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;하지만 화면을 닫고 원래의 화면으로 돌아올 때 응답을 받고 처리하는 코드가 필요합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그때 사용하는 함수가 &lt;/span&gt;&lt;b&gt;&lt;span&gt;startActivityForResult()&lt;/span&gt;&lt;/b&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실습 : 새 액티비티를 띄우고 닫으며 데이터 주고받기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590246018046&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_newactivity&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;newactivity&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 또 res/layout 폴더에 새로운 &lt;span style=&quot;color: #333333;&quot;&gt;Layout Resource File을 생성하고 이름은 activity_new로 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;activity_new.xml&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590246352445&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/btn_return&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;돌아가기&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 app/java/com.example.패키지명에 새로운 자바 클래스를 만들어보도록 합시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;654&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhHxct/btqEm3R24G7/gLT7bHzVy8hdkiYKEWYMBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhHxct/btqEm3R24G7/gLT7bHzVy8hdkiYKEWYMBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhHxct/btqEm3R24G7/gLT7bHzVy8hdkiYKEWYMBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhHxct%2FbtqEm3R24G7%2FgLT7bHzVy8hdkiYKEWYMBk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;654&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이름은 NewActivity로 하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;NewActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590246195661&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week3;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class NewActivity extends AppCompatActivity {

    Button btn_return;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new);

        btn_return = findViewById(R.id.btn_return);

        btn_return.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra(&quot;name&quot;, &quot;rina&quot;); //부가데이터
                setResult(RESULT_OK, intent); //응답 보내기
                finish(); //현재 액티비티 종료
            }
        });

    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;intent에 &quot;name&quot;이라는 키로 &quot;rina&quot;라는 데이터를 가진 Extra를 담아 응답을 보냅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590246602891&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static final int REQUEST_CODE_MENU = 101; //새 액티비티를 띄울 때 보낼 요청 코드&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 변수는 onCreate() 함수 위에 작성해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MainActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590246074246&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Button btn_newactivity = findViewById(R.id.btn_newactivity);
btn_newactivity.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    	Intent intent = new Intent(getApplicationContext(), NewActivity.class);
    	startActivityForResult(intent, REQUEST_CODE_MENU);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 코드는 현재 액티비티에서 NewActivity 액티비티로 화면을 전환해주는 코드입니다.&lt;/p&gt;
&lt;p&gt;onCreate() 함수 안에 작성해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MainActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590246544022&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == REQUEST_CODE_MENU) {
        Toast.makeText(getApplicationContext(),
                &quot;onActivityResult 함수 호출됨. 요청 코드 : &quot; + resultCode,
                Toast.LENGTH_SHORT).show();
        if(resultCode == RESULT_OK) {
            String name = data.getStringExtra(&quot;name&quot;);
            Toast.makeText(getApplicationContext(),
                    &quot;응답으로 전달된 name : &quot; + name,
                    Toast.LENGTH_SHORT).show();
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NewActivity가 종료되었을 때 결과 값을 받는 코드입니다. 만약 내가 REQUEST_CODE_MENU를 전송했다면 첫 번째 Toast가 실행되고 그 응답으로 RESULT_OK라는 응답코드를 받았다면 두 번째 Toast가 실행됩니다.&lt;/p&gt;
&lt;p&gt;이 코드는 onCreate() 함수 바깥에 작성해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막으로 app/manifests를 더블 클릭해주시면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;372&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGKHos/btqEmu3GEgR/wKKpfToJM0heK2w29w3Kk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGKHos/btqEmu3GEgR/wKKpfToJM0heK2w29w3Kk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGKHos/btqEmu3GEgR/wKKpfToJM0heK2w29w3Kk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGKHos%2FbtqEmu3GEgR%2FwKKpfToJM0heK2w29w3Kk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;372&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml 파일이 나타납니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AndroidManifest.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590247212608&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    package=&quot;com.example.week3&quot;&amp;gt;

    &amp;lt;application
        android:allowBackup=&quot;true&quot;
        android:icon=&quot;@mipmap/ic_launcher&quot;
        android:label=&quot;@string/app_name&quot;
        android:roundIcon=&quot;@mipmap/ic_launcher_round&quot;
        android:supportsRtl=&quot;true&quot;
        android:theme=&quot;@style/AppTheme&quot;&amp;gt;
        &amp;lt;activity android:name=&quot;.MainActivity&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;

                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/activity&amp;gt;
        &amp;lt;activity android:name=&quot;.NewActivity&quot; /&amp;gt;
    &amp;lt;/application&amp;gt;

&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Activity를 추가할 때마다 위 처럼 &amp;lt;activity android:name=&quot;.NewActivity&quot; /&amp;gt;를 추가해주어야합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행시켜 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200524-002214_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skzm0/btqEm1Uee5Q/2Ka5DPvgSSDBrtbyh19CL1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skzm0/btqEm1Uee5Q/2Ka5DPvgSSDBrtbyh19CL1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skzm0/btqEm1Uee5Q/2Ka5DPvgSSDBrtbyh19CL1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/skzm0/btqEm1Uee5Q/2Ka5DPvgSSDBrtbyh19CL1/img.gif&quot; data-filename=&quot;SmartSelect_20200524-002214_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;화질이 안좋아 잘보이진 않지만 &quot;onActivityResult 함수 호출됨. &lt;span&gt;요청 코드&lt;/span&gt;&lt;span&gt; : -1&quot;과 &quot;&lt;/span&gt;응답으로 전달된 name : rina&quot;라는 토스트 메시지가 뜨는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;액티비티의 수명주기&lt;/h2&gt;
&lt;p&gt;안드로이드의 액티비티에는 수명주기가 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;415&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kBlRg/btqEnIUa4gT/FXUJn87Qes3VeRDgQqDVEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kBlRg/btqEnIUa4gT/FXUJn87Qes3VeRDgQqDVEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kBlRg/btqEnIUa4gT/FXUJn87Qes3VeRDgQqDVEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkBlRg%2FbtqEnIUa4gT%2FFXUJn87Qes3VeRDgQqDVEk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;415&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onCreate&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;액티비티&lt;/span&gt;&lt;span&gt; 처음 만들어졌을 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 화면에 보이는 뷰들의 일반적인 상태를 설정하는 부분&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 이 함수 다음에는 항상 onStart() 함수가 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onStart&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;액티비티&lt;/span&gt;&lt;span&gt; 화면에 보이기 바로 전에 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 액티비티가 화면 상에 보이면 이 함수 다음에 onResume() 함수가 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 액티비티가 화면에서 가려지게 되면 이 함수 다음에 onStop() 함수가 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onResume&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;사용자와 상호작용하기 바로 전에 호출됨&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onRestart&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;액티비티&lt;/span&gt;&lt;span&gt; 중지 이후 다시 시작되기 바로 전&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 이 함수 다음에는 항상 onStart()함수가 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onPause&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;또 다른 &lt;/span&gt;&lt;span&gt;액티비티&lt;/span&gt;&lt;span&gt; 시작하려고 할 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 저장되지 않은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능을 수행하는 함수임&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 이 함수가 리턴하기 전에는 다음 액티비티가 시작될 수 없으므로 이 작업은 매우 빨리 수행된 후 리턴되어야 함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onStop&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;액티비티가&lt;/span&gt;&lt;span&gt; 사용자에게 더 이상 보이지 않을 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;onDestroy&lt;/span&gt;&lt;span&gt;() : &lt;/span&gt;&lt;span&gt;액티비티가&lt;/span&gt;&lt;span&gt; 소멸되어 없어지기 전에 호출됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 이 함수는 액티비티가 받는 마지막 호출이 됨&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실습 : 디버깅 로그로 수명주기 확인하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;MainActivity.java에서 onCreate() 함수 밖을 클릭하고 Ctrl + O를 눌러줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;364&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFppNc/btqEnHVg4xU/wtRMnldPBKT4IlFz02dw2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFppNc/btqEnHVg4xU/wtRMnldPBKT4IlFz02dw2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFppNc/btqEnHVg4xU/wtRMnldPBKT4IlFz02dw2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFppNc%2FbtqEnHVg4xU%2FwtRMnldPBKT4IlFz02dw2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;364&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 Override 또는 Implement 함수를 찾을 수 있습니다.&lt;/p&gt;
&lt;p&gt;여기서 onStart(), onPause(), onResume(), onRestart(), onDestroy() 함수를 찾아서 MainActivity에 추가해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1590248002941&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Override
protected void onStart() {
	super.onStart();
	Log.d(&quot;tag&quot;, &quot;onStart&quot;);
}

@Override
protected void onPause() {
	super.onPause();
	Log.d(&quot;tag&quot;, &quot;onPause&quot;);
}

@Override
protected void onResume() {
	super.onResume();
	Log.d(&quot;tag&quot;, &quot;onResume&quot;);
}

@Override
protected void onRestart() {
	super.onRestart();
	Log.d(&quot;tag&quot;, &quot;onRestart&quot;);
}

@Override
protected void onDestroy() {
	super.onDestroy();
	Log.d(&quot;tag&quot;, &quot;onDestroy&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 작성하고 앱을 실행시키면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2yU8p/btqEnHHKkGf/ioZ5NipLHFVSYZmGx3q8h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2yU8p/btqEnHHKkGf/ioZ5NipLHFVSYZmGx3q8h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2yU8p/btqEnHHKkGf/ioZ5NipLHFVSYZmGx3q8h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2yU8p%2FbtqEnHHKkGf%2FioZ5NipLHFVSYZmGx3q8h0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;log 창에 onCreate()함수가 실행된 후 바로 onStart와 onResume이 실행된 것을 확인할 수 있고&lt;/p&gt;
&lt;p&gt;다른 액티비티가 실행됐을 땐 onPause&lt;/p&gt;
&lt;p&gt;다시 메인액티비티로 돌아왔을 땐 onRestart, onStart, onResume&lt;/p&gt;
&lt;p&gt;그리고 앱을 종료했을 땐 onPause, onDestroy 함수가 실행된 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Fragment&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;프래그먼트&lt;/span&gt;&lt;span&gt;(Fragment)는&amp;nbsp;&lt;/span&gt;&lt;span&gt;하나의 화면을 여러 부분으로 나눠서 보여주거나 &lt;/span&gt;&lt;span&gt;각각의 부분 화면 단위로 바꿔서 보여주고 싶을 때 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그리고 BottomNavigationView는 하단탭을 만들어줄 수 있는 기능입니다. 카카오톡에도 하단탭이 사용된 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실습 : BottomNavigationView 사용하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 activity_main.xml에 버튼 하나를 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590248382066&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_fragment&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;fragment&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 app/java/com.example.week3에 FragmentActivity.java 파일을 새로 만들겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;FragmentActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590248466553&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week3;

import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class FragmentActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 액티비티와 연결할 레이아웃 xml파일도 만들어주겠습니다.&lt;/p&gt;
&lt;p&gt;우선 design 화면에서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;600&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FfFvW/btqElXL29iu/yZdjIMclHrAreWQIigiow0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FfFvW/btqElXL29iu/yZdjIMclHrAreWQIigiow0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FfFvW/btqElXL29iu/yZdjIMclHrAreWQIigiow0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFfFvW%2FbtqElXL29iu%2FyZdjIMclHrAreWQIigiow0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;600&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Palette의 Containers안에 BottomNavigationView를 다운로드 받아줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;461&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBVqTZ/btqElFx558v/4TcNnParsYK7kJOt8uOXOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBVqTZ/btqElFx558v/4TcNnParsYK7kJOt8uOXOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBVqTZ/btqElFx558v/4TcNnParsYK7kJOt8uOXOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBVqTZ%2FbtqElFx558v%2F4TcNnParsYK7kJOt8uOXOk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;461&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;OK 눌러주시면 됩니다.&lt;/p&gt;
&lt;p&gt;그러고나서 다음과 같이 xml 파일을 작성하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_fragment.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590248613409&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;FrameLayout
        android:id=&quot;@+id/mainFrame&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot; /&amp;gt;

    &amp;lt;com.google.android.material.bottomnavigation.BottomNavigationView
        android:id=&quot;@+id/bottomNavigation&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:background=&quot;#ffffff&quot;/&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 &lt;span style=&quot;color: #333333;&quot;&gt;FragmentActivity.java의 super.onCreate(savedInstanceState); 코드 밑에 다음과 같이 작성해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;FragmentActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590248643726&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;setContentView(R.layout.activity_fragment);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FragmentActivity와 activity_fragment.xml 파일을 연결한 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 하단탭에 들어갈 메뉴를 만들어주겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;341&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPxI7q/btqEnhbqmYf/9TvimcuTg1OK4cKmNu3b3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPxI7q/btqEnhbqmYf/9TvimcuTg1OK4cKmNu3b3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPxI7q/btqEnhbqmYf/9TvimcuTg1OK4cKmNu3b3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPxI7q%2FbtqEnhbqmYf%2F9TvimcuTg1OK4cKmNu3b3k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;341&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이번엔 res 폴더를 우클릭해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;674&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nGSQV/btqEoBAiIM7/9KCKpME8096kiVc6hgseB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nGSQV/btqEoBAiIM7/9KCKpME8096kiVc6hgseB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nGSQV/btqEoBAiIM7/9KCKpME8096kiVc6hgseB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnGSQV%2FbtqEoBAiIM7%2F9KCKpME8096kiVc6hgseB1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;674&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Android Resource Directory를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;605&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1zWst/btqEmMiD53e/C4XzeNsgI7IpKa0pldYBpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1zWst/btqEmMiD53e/C4XzeNsgI7IpKa0pldYBpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1zWst/btqEmMiD53e/C4XzeNsgI7IpKa0pldYBpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1zWst%2FbtqEmMiD53e%2FC4XzeNsgI7IpKa0pldYBpK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;605&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 Resource type을 꼭 menu로 설정해주세요!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;601&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmwRdd/btqEniam2nX/kZlrY8keLlsXWCVY0yWOkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmwRdd/btqEniam2nX/kZlrY8keLlsXWCVY0yWOkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmwRdd/btqEniam2nX/kZlrY8keLlsXWCVY0yWOkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmwRdd%2FbtqEniam2nX%2FkZlrY8keLlsXWCVY0yWOkk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;601&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 menu 폴더를 우클릭해서 Menu Resource File을 만들어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이름은 bottom_menu로 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;685&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOMPe/btqEnhP5ary/fYljsX8TRnKzjKkxEHduH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOMPe/btqEnhP5ary/fYljsX8TRnKzjKkxEHduH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOMPe/btqEnhP5ary/fYljsX8TRnKzjKkxEHduH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOMPe%2FbtqEnhP5ary%2FfYljsX8TRnKzjKkxEHduH1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;685&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번에는 drawable 폴더를 우클릭해서 Vector Asset을 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;666&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch1sdf/btqEn7TKMZo/1BX6jk6KGaSPQKNToVvSz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch1sdf/btqEn7TKMZo/1BX6jk6KGaSPQKNToVvSz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch1sdf/btqEn7TKMZo/1BX6jk6KGaSPQKNToVvSz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch1sdf%2FbtqEn7TKMZo%2F1BX6jk6KGaSPQKNToVvSz1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;666&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 Clip Art를 더블 클릭해주면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;619&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/voe3d/btqEnJlgw6k/tIvkwKLbg340AlSNlwOBXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/voe3d/btqEnJlgw6k/tIvkwKLbg340AlSNlwOBXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/voe3d/btqEnJlgw6k/tIvkwKLbg340AlSNlwOBXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvoe3d%2FbtqEnJlgw6k%2FtIvkwKLbg340AlSNlwOBXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;619&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;다음과 같이 여러가지의 아이콘들을 볼 수 있습니다. 여기서 아무거나 세 개를 drawable 폴더에 추가해주세요.&lt;/p&gt;
&lt;p&gt;총 3개를 추가해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 아이템을 하단탭 메뉴에 추가시켜주겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;bottom_menu.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590249182398&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;menu xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;&amp;gt;
    &amp;lt;item
        android:id=&quot;@+id/tab1&quot;
        android:icon=&quot;@drawable/ic_android_black_24dp&quot;
        android:title=&quot;tab1&quot; /&amp;gt;
    &amp;lt;item
        android:id=&quot;@+id/tab2&quot;
        android:icon=&quot;@drawable/ic_access_time_black_24dp&quot;
        android:title=&quot;tab2&quot; /&amp;gt;
    &amp;lt;item
        android:id=&quot;@+id/tab3&quot;
        android:icon=&quot;@drawable/ic_add_circle_outline_black_24dp&quot;
        android:title=&quot;tab3&quot; /&amp;gt;

&amp;lt;/menu&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;android:icon 부분은 본인이 추가하신 아이콘의 경로를 입력해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 BottomNavigationView 태그에 다음 속성을 추가해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_fragment.xml&lt;/p&gt;
&lt;pre id=&quot;code_1590249238992&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;app:menu=&quot;@menu/bottom_menu&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번엔 부분화면인 Fragment를 만들어보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;759&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8AdMQ/btqElETpoBb/BeGKz5XEAiV7JIvhfYSxcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8AdMQ/btqElETpoBb/BeGKz5XEAiV7JIvhfYSxcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8AdMQ/btqElETpoBb/BeGKz5XEAiV7JIvhfYSxcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8AdMQ%2FbtqElETpoBb%2FBeGKz5XEAiV7JIvhfYSxcK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;759&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Fragment(Blank)를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;609&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpaKjV/btqEm3xKjm1/vXwoXHbVE7KA8OgcIC99h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpaKjV/btqEm3xKjm1/vXwoXHbVE7KA8OgcIC99h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpaKjV/btqEm3xKjm1/vXwoXHbVE7KA8OgcIC99h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpaKjV%2FbtqEm3xKjm1%2FvXwoXHbVE7KA8OgcIC99h1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;609&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이름은 Frag1으로 만들고나면 fragment_frag1.xml 파일이 layout 폴더에 자동으로 생성됩니다.&lt;/p&gt;
&lt;p&gt;그러면 생성된 &lt;span style=&quot;color: #333333;&quot;&gt;fragment_frag1.xml 내부의 TextView 태그의 text 속성 값에 fragment1이라고 입력해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590249850614&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;FrameLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.Frag1&quot;&amp;gt;

    &amp;lt;!-- TODO: Update blank fragment layout --&amp;gt;
    &amp;lt;TextView
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;
        android:text=&quot;fragment1&quot; /&amp;gt;

&amp;lt;/FrameLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;같은 과정을 2번 더 반복하여 Frag2와 Frag3도 만들어 주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 이제 하단탭을 사용할 준비가 되었습니다. FragmentActivity.java로 돌아가 코드를 작성하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;FragmentActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590249408482&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week3;

import android.os.Bundle;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;


import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;

public class FragmentActivity extends AppCompatActivity {

    BottomNavigationView bottomNavigationView;
    Frag1 frag1;
    Frag2 frag2;
    Frag3 frag3;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);

        bottomNavigationView = findViewById(R.id.bottomNavigation);
        frag1 = new Frag1();
        frag2 = new Frag2();
        frag3 = new Frag3();

        getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag1).commit();

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.tab1: {
                        getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag1).commit();
                        return true;
                    }
                    case R.id.tab2: {
                        getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag2).commit();
                        return true;
                    }
                    case R.id.tab3: {
                        getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag3).commit();
                        return true;
                    }
                }
                return false;
            }
        });
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 앱을 실행시키기 위해서 AndroidManifest.xml 파일에&lt;/p&gt;
&lt;pre id=&quot;code_1590249974320&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.FragmentActivity&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;태그를 추가하는 것을 잊지 마세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java에 FragmentActivity로 전환되는 &lt;span style=&quot;color: #333333;&quot;&gt;버튼 기능을 추가하고 앱을 실행시켜보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;MainActivity.java&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590250213706&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Button btn_fragment = findViewById(R.id.btn_fragment);
btn_fragment.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    	Intent intent = new Intent(getApplicationContext(), FragmentActivity.class);
    	startActivity(intent);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행시키면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200524-011337_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhGNuq/btqElFSqcpE/Wi3hVXbgSTdwiyQKMiN7sK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhGNuq/btqElFSqcpE/Wi3hVXbgSTdwiyQKMiN7sK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhGNuq/btqElFSqcpE/Wi3hVXbgSTdwiyQKMiN7sK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bhGNuq/btqElFSqcpE/Wi3hVXbgSTdwiyQKMiN7sK/img.gif&quot; data-filename=&quot;SmartSelect_20200524-011337_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;BottomNavigationView가 잘 실행되는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 ViewPager라고 화면을 드래그해도 fragment를 전환할 수 있습니다.&lt;/p&gt;
&lt;p&gt;여기에 바로 실습해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;실습 : ViewPager 사용하기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 activity_fragment.xml의 FrameLayout을 viewpager로 바꿔줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;activity_fragment.xml&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590250560097&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;androidx.viewpager.widget.ViewPager
        android:id=&quot;@+id/mainFrame&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot; /&amp;gt;

    &amp;lt;com.google.android.material.bottomnavigation.BottomNavigationView
        android:id=&quot;@+id/bottomNavigation&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        app:menu=&quot;@menu/bottom_menu&quot;
        android:background=&quot;#ffffff&quot;/&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;FragmentActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1590250619509&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week3;

import android.os.Bundle;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;

public class FragmentActivity extends AppCompatActivity {

    BottomNavigationView bottomNavigationView;
    Frag1 frag1;
    Frag2 frag2;
    Frag3 frag3;
    ViewPager pager;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);

        bottomNavigationView = findViewById(R.id.bottomNavigation);
        frag1 = new Frag1();
        frag2 = new Frag2();
        frag3 = new Frag3();

        //getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag1).commit();
        pager = findViewById(R.id.mainFrame);
        pager.setOffscreenPageLimit(3);
        final MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager());
        adapter.addItem(frag1);
        adapter.addItem(frag2);
        adapter.addItem(frag3);
        pager.setAdapter(adapter);

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.tab1: {
                        //getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag1).commit();
                        pager.setCurrentItem(0);
                        return true;
                    }
                    case R.id.tab2: {
                        //getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag2).commit();
                        pager.setCurrentItem(1);
                        return true;
                    }
                    case R.id.tab3: {
                        //getSupportFragmentManager().beginTransaction().replace(R.id.mainFrame, frag3).commit();
                        pager.setCurrentItem(2);
                        return true;
                    }
                }
                return false;
            }
        });

        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                bottomNavigationView.getMenu().getItem(position).setChecked(true);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
    class MyPagerAdapter extends FragmentStatePagerAdapter {
        ArrayList&amp;lt;Fragment&amp;gt; items = new ArrayList&amp;lt;&amp;gt;();
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        public void addItem(Fragment item) {
            items.add(item);
        }

        @Override
        public Fragment getItem(int position) {
            return items.get(position);
        }

        @Override
        public int getCount() {
            return items.size();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;FragmentActivity.java 코드는 위와 같이 수정하면 ViewPager를 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-filename=&quot;SmartSelect_20200524-012114_Gallery[1].gif&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O3BBo/btqEoA9e5Km/EIw2Jkrge4sWtcCinFFS4k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O3BBo/btqEoA9e5Km/EIw2Jkrge4sWtcCinFFS4k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O3BBo/btqEoA9e5Km/EIw2Jkrge4sWtcCinFFS4k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/O3BBo/btqEoA9e5Km/EIw2Jkrge4sWtcCinFFS4k/img.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; data-filename=&quot;SmartSelect_20200524-012114_Gallery[1].gif&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/22</guid>
      <comments>https://rina214.tistory.com/22#entry22comment</comments>
      <pubDate>Sun, 24 May 2020 01:22:35 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 또 다른 위젯(Widget)과 그래들(Gradle)</title>
      <link>https://rina214.tistory.com/21</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - [DSC] 위젯(Widget) 익히기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589875951127&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[DSC] 위젯(Widget) 익히기&quot; data-og-description=&quot;1. 위젯(Widget) 익히기 저번 주에는 TextView와 Button만 이용해봤었는데 이번에는 EditText, ImageView, ImageButton, CheckBox, RadioButton, CalendarView도 한 번 사용해보겠습니다. 우선 안드로이드 스튜디..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/20&quot; data-og-url=&quot;https://rina214.tistory.com/20&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BY6Gq/hyF6qjyIyw/RNcPRiwYS5v0gvk8TTSPe0/img.png?width=380&amp;amp;height=814&amp;amp;face=0_0_380_814,https://scrap.kakaocdn.net/dn/ca7hEI/hyF6gutCee/l7h7LnjMxDchDCJQTWHDx1/img.png?width=380&amp;amp;height=814&amp;amp;face=0_0_380_814,https://scrap.kakaocdn.net/dn/hGdKW/hyF6nNT7Ye/oxp3FxIMqOzvRxO0ehfq80/img.png?width=383&amp;amp;height=815&amp;amp;face=0_0_383_815&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/20&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/20&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BY6Gq/hyF6qjyIyw/RNcPRiwYS5v0gvk8TTSPe0/img.png?width=380&amp;amp;height=814&amp;amp;face=0_0_380_814,https://scrap.kakaocdn.net/dn/ca7hEI/hyF6gutCee/l7h7LnjMxDchDCJQTWHDx1/img.png?width=380&amp;amp;height=814&amp;amp;face=0_0_380_814,https://scrap.kakaocdn.net/dn/hGdKW/hyF6nNT7Ye/oxp3FxIMqOzvRxO0ehfq80/img.png?width=383&amp;amp;height=815&amp;amp;face=0_0_383_815');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[DSC] 위젯(Widget) 익히기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. 위젯(Widget) 익히기 저번 주에는 TextView와 Button만 이용해봤었는데 이번에는 EditText, ImageView, ImageButton, CheckBox, RadioButton, CalendarView도 한 번 사용해보겠습니다. 우선 안드로이드 스튜디..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이전 포스트에 이어 또 다른 위젯도 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스낵바(Snackbar)&lt;/h2&gt;
&lt;p&gt;Snackbar는 Toast 메시지와 비슷합니다.&lt;/p&gt;
&lt;p&gt;일단 스낵바를 사용하기 위해서는 activity_main.xml 에서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGfCkR/btqEhPMCksJ/CNu8PZ5eIVdX7fZ76ThlA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGfCkR/btqEhPMCksJ/CNu8PZ5eIVdX7fZ76ThlA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGfCkR/btqEhPMCksJ/CNu8PZ5eIVdX7fZ76ThlA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGfCkR%2FbtqEhPMCksJ%2FCNu8PZ5eIVdX7fZ76ThlA1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 버튼을 눌러주시면 Palette가 있을 겁니다. Palette에서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEkAxd/btqEh59wToD/aaioEMvkCCI14kXTIUi4k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEkAxd/btqEh59wToD/aaioEMvkCCI14kXTIUi4k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEkAxd/btqEh59wToD/aaioEMvkCCI14kXTIUi4k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEkAxd%2FbtqEh59wToD%2FaaioEMvkCCI14kXTIUi4k0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;AppBarLayout을 다운로드 받아야 Snackbar를 사용가능 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 버튼을 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589876206625&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_sb&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;snackbar&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589876334124&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Button btn_sb = findViewById(R.id.btn_sb);

btn_sb.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    	Snackbar.make(v, &quot;스낵바입니다.&quot;, Snackbar.LENGTH_SHORT).show();
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;토스트 메시지를 띄우고 싶을 때는&lt;/p&gt;
&lt;pre id=&quot;code_1589876418949&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Toast.makeText(MainActivity.this, &quot;토스트 메시지입니다.&quot;, Toast.LENGTH_SHORT).show();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;였는데 둘의 코드가 비슷함을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실행시켜보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-172158_Gallery[1].gif&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nSPoK/btqEhQLyH17/ObI7g8Ke1HtM0f10qIchEK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nSPoK/btqEhQLyH17/ObI7g8Ke1HtM0f10qIchEK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nSPoK/btqEhQLyH17/ObI7g8Ke1HtM0f10qIchEK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/nSPoK/btqEhQLyH17/ObI7g8Ke1HtM0f10qIchEK/img.gif&quot; data-filename=&quot;SmartSelect_20200519-172158_Gallery[1].gif&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;알림 대화상자(Dialog)&lt;/h2&gt;
&lt;p&gt;사용자로부터 확인을 받거나 선택하게 할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589876657216&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_dialog&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;dialog&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589876790556&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Button btn_dialog = findViewById(R.id.btn_dialog);

btn_dialog.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		showMessage();
	}
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;버튼을 누르면 showMessage()라는 함수가 실행되게 하겠습니다.&lt;/p&gt;
&lt;p&gt;그리고 showMessage()함수는 onCreate() 함수 바깥에 정의해주도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589876879688&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void showMessage() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(&quot;안내&quot;);
    builder.setMessage(&quot;종료하시겠습니까?&quot;);
    builder.setIcon(android.R.drawable.ic_dialog_alert);

    builder.setPositiveButton(&quot;예&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String message = &quot;예 버튼이 눌렸습니다.&quot;;
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
        }
    });

    builder.setNeutralButton(&quot;취소&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String message = &quot;취소 버튼이 눌렸습니다.&quot;;
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
        }
    });

    builder.setNegativeButton(&quot;아니오&quot;, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String message = &quot;아니오 버튼이 눌렸습니다.&quot;;
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
        }
    });

     AlertDialog dialog = builder.create();
    dialog.show();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;setTitle으로 제목, setMessage는 전달할 내용, setIcon으로 아이콘을 설정해줄 수 있습니다.&lt;/p&gt;
&lt;p&gt;setPositiveButton, setNeutralButton, setNegativeButton 이렇게 총 3가지의 버튼이 있습니다.&lt;/p&gt;
&lt;p&gt;코드와 같이 각각 예, 취소, 아니오 버튼이라고 생각하면 되고 그 버튼을을 눌렀을 때 실행할 내용을 onClick 함수 내에 코드를 작성해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-173347_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRfRI/btqEhPlAtae/dw3xhEi4xxXGrcKsNRXN7k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRfRI/btqEhPlAtae/dw3xhEi4xxXGrcKsNRXN7k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRfRI/btqEhPlAtae/dw3xhEi4xxXGrcKsNRXN7k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/lRfRI/btqEhPlAtae/dw3xhEi4xxXGrcKsNRXN7k/img.gif&quot; data-filename=&quot;SmartSelect_20200519-173347_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실행시키면 다음과 같이 나타나는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로그레스바(Progressbar)&lt;/h2&gt;
&lt;p&gt;작업의 진행 정도를 표시하거나 작업이 진행 중임을 사용자에게 알려줄 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;막대 모양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;작업의 진행 정도를 알려줌&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589877375242&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ProgressBar
    android:id=&quot;@+id/progressBar&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot;
    style=&quot;@style/Widget.AppCompat.ProgressBar.Horizontal&quot;
    android:max=&quot;100&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589877487691&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ProgressBar progressBar = findViewById(R.id.progressBar);
progressBar.setProgress(80);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;setProgress는 정수값을 받아 프로그레스바의 값으로 설정해줍니다.&lt;/p&gt;
&lt;p&gt;activity_main.xml에서 max를 100으로 설정했으니 80으로 setProgress를 해주면 80%만큼 진행이 되었다라는 것을 표시할 수 있는 거예요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpOXlp/btqEh59yPXC/e8g3qmhei6aL1oXtc8GGe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpOXlp/btqEh59yPXC/e8g3qmhei6aL1oXtc8GGe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpOXlp/btqEh59yPXC/e8g3qmhei6aL1oXtc8GGe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpOXlp%2FbtqEh59yPXC%2Fe8g3qmhei6aL1oXtc8GGe0%2Fimg.png&quot; width=&quot;264&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원 모양&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 작업이 진행 중임을 알려줌, 반복적으로 표시됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589878147529&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_progress&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;progress&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589878250861&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Button btn_progress = findViewById(R.id.btn_progress);
btn_progress.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		ProgressDialog progressDialog = new ProgressDialog(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog);
		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		progressDialog.setMessage(&quot;데이터를 확인하는 중입니다.&quot;);
		progressDialog.show();
	}
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;데이터를 받아올 때 약간의 시간이 걸릴 수 있습니다. 그럴 때 이 ProgressDialog를 이용하시면 좋습니다.&lt;/p&gt;
&lt;p&gt;ProgressDialog를 끝낼 때는 progressDialog.dismiss()라고 쓰시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-175346_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1LKW/btqEg0HENzg/a4p2uWbTq1a0nOkZdcrxuK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1LKW/btqEg0HENzg/a4p2uWbTq1a0nOkZdcrxuK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1LKW/btqEg0HENzg/a4p2uWbTq1a0nOkZdcrxuK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/k1LKW/btqEg0HENzg/a4p2uWbTq1a0nOkZdcrxuK/img.gif&quot; data-filename=&quot;SmartSelect_20200519-175346_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;실행해보면 다음과 같은 화면을 보실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시크바(SeekBar)&lt;/h2&gt;
&lt;p&gt;SeekBar는 어떤 기능인지 확인만 하고 넘어가겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589878535709&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;SeekBar
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;wrap_content&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-175725_Gallery[1].gif&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k9WnE/btqEg1zQ5Kk/WL2bmyAcnLg2y3BMzJYVF0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k9WnE/btqEg1zQ5Kk/WL2bmyAcnLg2y3BMzJYVF0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k9WnE/btqEg1zQ5Kk/WL2bmyAcnLg2y3BMzJYVF0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/k9WnE/btqEg1zQ5Kk/WL2bmyAcnLg2y3BMzJYVF0/img.gif&quot; data-filename=&quot;SmartSelect_20200519-175725_Gallery[1].gif&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리소스(Resource)와 매니페스트(Manifest)&lt;/h2&gt;
&lt;p&gt;안드로이드 앱은 크게 자바코드와 리소스로 구성됩니다.&lt;/p&gt;
&lt;p&gt;자바코드는 앱의 흐름과 기능을 정의하고&lt;/p&gt;
&lt;p&gt;리소스는 레이아웃이나 이미지처럼 사용자에게 보여주기 위해 사용하는 파일이나 데이터를 관리합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;매니페스트는 리소스는 아니지만 설치된 앱의 구성요소, 권한 등을 시스템에 알려줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rl0z1/btqEhPTrDUM/JvafuSJ3kmJSY0BTUsdTY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rl0z1/btqEhPTrDUM/JvafuSJ3kmJSY0BTUsdTY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rl0z1/btqEhPTrDUM/JvafuSJ3kmJSY0BTUsdTY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRl0z1%2FbtqEhPTrDUM%2FJvafuSJ3kmJSY0BTUsdTY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;가장 상위 폴더에 매니페스트 파일이 있습니다.&lt;/p&gt;
&lt;p&gt;label 값을 바꾸면 앱의 이름이 바뀌고&lt;/p&gt;
&lt;p&gt;icon, roundIcon 을 바꾸면 앱의 아이콘이 바뀝니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;리소스를 자바 코드와 분리하는 이유는 이해하기 쉽고 유지관리가 용이하기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그래들(Gradle)&lt;/h2&gt;
&lt;p&gt;안드로이드 앱을 실행하거나 플레이스토어, 앱스토어에 올릴 때는 소스 파일이나 리소스 파일을 빌드하거나 배포하는 작업이 필요합니다. 이때 사용되는 것이 그래들(Gradle)입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;빌드 설정은 build.gradle 파일에 넣어 관리합니다.&lt;/p&gt;
&lt;p&gt;프로젝트 수준과 모듈 수준으로 나뉘는데&lt;/p&gt;
&lt;p&gt;프로젝트 수준은 classpath를 추가하는 정도 말고는 수정하는 경우가 드뭅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgidV8/btqEg1s4RYc/i0ioXA8XH0ho7cqcwQtCGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgidV8/btqEg1s4RYc/i0ioXA8XH0ho7cqcwQtCGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgidV8/btqEg1s4RYc/i0ioXA8XH0ho7cqcwQtCGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgidV8%2FbtqEg1s4RYc%2Fi0ioXA8XH0ho7cqcwQtCGK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모듈 수준은 빌드에 필요한 중요한 정보들이 들어있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eit8ZO/btqEeYK5EUL/0kiP29kBKKKmr2xbq4nKKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eit8ZO/btqEeYK5EUL/0kiP29kBKKKmr2xbq4nKKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eit8ZO/btqEeYK5EUL/0kiP29kBKKKmr2xbq4nKKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feit8ZO%2FbtqEeYK5EUL%2F0kiP29kBKKKmr2xbq4nKKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- applicationId : 이 앱의 id 값으로 전 세게에서 유일한 값이어야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- compileSdkVersion : 빌드를 진행할 때 어떤 버전의 SDK를 사용할건지 선택합니다. 보통은 최신버전을 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- minSdkVersion : 어떤 하위 버전까지 지원할지 지정합니다. 모든 단말을 지원하면 좋겠지만 특정 버전 이하에서는 사용하지 못하는 기능이 있기 때문에 지정해줘야 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- dependencies : 외부 라이브러리를 추가할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;settings.gradle에서는 어떤 모듈을 포함할건지에 대한 정보를 포함합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqu0YF/btqEfqN8kwI/Kv3sDITzGxJ0RAcdKFLoe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqu0YF/btqEfqN8kwI/Kv3sDITzGxJ0RAcdKFLoe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqu0YF/btqEfqN8kwI/Kv3sDITzGxJ0RAcdKFLoe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqu0YF%2FbtqEfqN8kwI%2FKv3sDITzGxJ0RAcdKFLoe0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나머지 그래들에서는 안드로이드 스튜디오에서 자동 설정해주는 경우가 많아서 몰라도 괜찮습니다 :)&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>Dialog</category>
      <category>gradle</category>
      <category>manifest</category>
      <category>ProgressBar</category>
      <category>Resource</category>
      <category>SeekBar</category>
      <category>snackbar</category>
      <category>Toast</category>
      <category>안드로이드스튜디오</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/21</guid>
      <comments>https://rina214.tistory.com/21#entry21comment</comments>
      <pubDate>Tue, 19 May 2020 18:09:32 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 위젯(Widget) 익히기</title>
      <link>https://rina214.tistory.com/20</link>
      <description>&lt;p&gt;&lt;b&gt;1. 위젯(Widget) 익히기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저번 주에는 TextView와 Button만 이용해봤었는데 이번에는 EditText, ImageView, ImageButton, CheckBox, RadioButton, CalendarView도 한 번 사용해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우선 안드로이드 스튜디오에 새 프로젝트를 만들고 activity_mai.xml의 Layout은 LinearLayout, orientation 속성은 vertical로 바꿔주세요. 그리고 안에 위젯을 많이 추가할 예정이라 ScrollView도 이용할게요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589812832822&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ScrollView  xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&amp;gt;
    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;vertical&quot;&amp;gt;
        
    &amp;lt;/LinearLayout&amp;gt;
&amp;lt;/ScrollView&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;EditText&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;EditText는 사용자로부터 값을 입력받을 때 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589813015085&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;EditText
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:hint=&quot;텍스트를 입력해주세요.&quot;
    android:inputType=&quot;text&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LinearLayout 안에 위와 같이 입력해주세요.&lt;/p&gt;
&lt;p&gt;hint 속성은 아무 값도 입력하지 않았을 때 나타나는 문구입니다.&lt;/p&gt;
&lt;p&gt;inputType 속성은 키패드의 문자 유형을 지정할 수 있게합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200518-235300_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; width=&quot;252&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vZ3ku/btqEgiahuRA/IO0tgEoSHyONG3rMaTzW41/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vZ3ku/btqEgiahuRA/IO0tgEoSHyONG3rMaTzW41/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vZ3ku/btqEgiahuRA/IO0tgEoSHyONG3rMaTzW41/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/vZ3ku/btqEgiahuRA/IO0tgEoSHyONG3rMaTzW41/img.gif&quot; data-filename=&quot;SmartSelect_20200518-235300_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; width=&quot;252&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실행을 시키면 다음과 같이 나타납니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;만약 text 속성을 phone으로 바꾸면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;255&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mZzfC/btqEdkOmP6I/E54dQAvYB0FvmxK9yew2oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mZzfC/btqEdkOmP6I/E54dQAvYB0FvmxK9yew2oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mZzfC/btqEdkOmP6I/E54dQAvYB0FvmxK9yew2oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmZzfC%2FbtqEdkOmP6I%2FE54dQAvYB0FvmxK9yew2oK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;255&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;키패드가 자동적으로 숫자로 나타나게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 EditText는 보통 사용자의 입력을 받아 다른 일을 수행하기 위해 사용되기 때문에 입력값을 받아오는 코드를 알아야겠죠??&lt;/p&gt;
&lt;pre id=&quot;code_1589815168290&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;TextView
    android:id=&quot;@+id/textView&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot; /&amp;gt;

&amp;lt;EditText
    android:id=&quot;@+id/editText&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:hint=&quot;텍스트를 입력해주세요.&quot;
    android:inputType=&quot;text&quot;/&amp;gt;
    
&amp;lt;Button
    android:id=&quot;@+id/btn_et&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;edittext&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 id 값들을 부여하고 MainActivity.java 파일로 가겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;버튼을 클릭하면 TextView의 text가 EditText의 text로 설정되도록 해봅시다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589815483354&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week2;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    EditText editText;
    Button btn_editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        editText = findViewById(R.id.editText);
        btn_editText = findViewById(R.id.btn_et);
        
        btn_editText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textView.setText(editText.getText().toString());
            }
        });

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TextView 형식의 textView 변수, EditText 형식의 editText 변수, Button 형식의 btn_editText를 MainActivity 클래스 내부에서 선언하고 onCreate 함수 안에서는 id 값으로 activity_main.xml 파일에 있던 뷰들을 연결해줍니다.&lt;/p&gt;
&lt;p&gt;그리고 btn_editText를 클릭했을 때 editText의 text를 얻어와 String 형식으로 바꾼 값을 textView의 text로 지정해준 것이 위의 코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-003319_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9y6gs/btqEepVM7OU/KxyDTq6VO9asycEtjk9k8k/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9y6gs/btqEepVM7OU/KxyDTq6VO9asycEtjk9k8k/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9y6gs/btqEepVM7OU/KxyDTq6VO9asycEtjk9k8k/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/9y6gs/btqEepVM7OU/KxyDTq6VO9asycEtjk9k8k/img.gif&quot; data-filename=&quot;SmartSelect_20200519-003319_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;화질이 좋지 않아 보이실지 모르겠지만 버튼을 누르면 EditText에서 입력받은 rina라는 글씨가&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;최상단에&lt;/span&gt; 나타납니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;ImageView, ImageButton&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;ImageView와 ImageButton의 차이점은 버튼 기능이 있냐 없냐의 차이이기 때문에 ImageView를 설명해드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589814132453&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ImageView
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:src=&quot;@mipmap/ic_launcher&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위와 같이 ImageView를 추가해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;뷰에 나타내고 싶은 이미지를 src 속성에 입력해주면 이미지가 나타날거에요. @mipmap/ic_launcher는 안드로이드 스튜디오에 기본적으로 깔려있고 실행시켜보면 안드로이드가 나타날거예요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;269&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYlA8x/btqEghWLDYh/2zYtG5ZNGBlQBhDeH2HlR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYlA8x/btqEghWLDYh/2zYtG5ZNGBlQBhDeH2HlR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYlA8x/btqEghWLDYh/2zYtG5ZNGBlQBhDeH2HlR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYlA8x%2FbtqEghWLDYh%2F2zYtG5ZNGBlQBhDeH2HlR0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;269&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 내가 원하는 이미지를 넣고 싶다면 원하는 이미지를 drawable 폴더에 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;291&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvwxOG/btqEeYp6W2Y/qGAMjUSZSk5NkszntwNKsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvwxOG/btqEeYp6W2Y/qGAMjUSZSk5NkszntwNKsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvwxOG/btqEeYp6W2Y/qGAMjUSZSk5NkszntwNKsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvwxOG%2FbtqEeYp6W2Y%2FqGAMjUSZSk5NkszntwNKsK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;291&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;497&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oyA4l/btqEfqtbhwz/sqtrKBKRXlaIkkjlmcXqG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oyA4l/btqEfqtbhwz/sqtrKBKRXlaIkkjlmcXqG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oyA4l/btqEfqtbhwz/sqtrKBKRXlaIkkjlmcXqG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoyA4l%2FbtqEfqtbhwz%2FsqtrKBKRXlaIkkjlmcXqG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;497&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이미지 이름은 영어 소문자만 가능해요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;273&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA1etp/btqEd8mn3fc/qZX8UYK4fCsVHwLJsRF5Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA1etp/btqEd8mn3fc/qZX8UYK4fCsVHwLJsRF5Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA1etp/btqEd8mn3fc/qZX8UYK4fCsVHwLJsRF5Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA1etp%2FbtqEd8mn3fc%2FqZX8UYK4fCsVHwLJsRF5Hk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;273&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 drawable 폴더에 이미지 파일을 넣어주시고&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589814898484&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ImageView
    android:layout_width=&quot;100dp&quot;
    android:layout_height=&quot;100dp&quot;
    android:src=&quot;@drawable/rina&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ImageView의 src를 바꿔주시면&lt;/p&gt;
&lt;p&gt;이렇게 사진이 추가되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;312&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGFGKg/btqEfXda4Rq/0MNJOcMIhJkCzk349vAPIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGFGKg/btqEfXda4Rq/0MNJOcMIhJkCzk349vAPIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGFGKg/btqEfXda4Rq/0MNJOcMIhJkCzk349vAPIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGFGKg%2FbtqEfXda4Rq%2F0MNJOcMIhJkCzk349vAPIK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;312&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CheckBox&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CheckBox는 말 그대로 체크를 할 수 있는 버튼입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589816296156&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;CheckBox
    android:id=&quot;@+id/cb_pnu&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;부산대학교&quot;/&amp;gt;
    
&amp;lt;CheckBox
    android:id=&quot;@+id/cb_computer&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;정컴&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CheckBox를 두 개 추가해보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용자가 어떤 것을 눌렀는지 알아야겠죠??&lt;/p&gt;
&lt;pre id=&quot;code_1589816447600&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:id=&quot;@+id/btn_cb&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;checkbox&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;버튼을 추가해주시고 MainActivity.java 파일로 가보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589816515122&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CheckBox cb_pnu, cb_computer;
Button btn_cb;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589816535320&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cb_pnu = findViewById(R.id.cb_pnu);
cb_computer = findViewById(R.id.cb_computer);
btn_cb = findViewById(R.id.btn_cb);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위에서와 동일하게 변수를 선언해 주시고 id로 연결을 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589816703108&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;btn_cb.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    	String checkbox = &quot;&quot;;
    	if (cb_pnu.isChecked()) {
    		checkbox += cb_pnu.getText();
    	}
    	if (cb_computer.isChecked()) {
    		checkbox += cb_computer.getText();
    	}
    	textView.setText(checkbox);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 버튼을 클릭했을 때 cb_pnu가 체크되어 있으면 &quot;부산대학교&quot;, cb_computer가 체크되어 있으면 &quot;정컴&quot;을 TextView에 나타나게 한 코드입니다. 실행시켜봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-004800_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAmt5a/btqEdkgAiE2/k0y1poeepk6CsVNAXRSTyK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAmt5a/btqEdkgAiE2/k0y1poeepk6CsVNAXRSTyK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAmt5a/btqEdkgAiE2/k0y1poeepk6CsVNAXRSTyK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cAmt5a/btqEdkgAiE2/k0y1poeepk6CsVNAXRSTyK/img.gif&quot; data-filename=&quot;SmartSelect_20200519-004800_Gallery[1].gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;클릭하는대로 TextView에 나타나는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;클릭이 되었는지 확인하는 isChecked() 라는 코드만 알아도 좋을 것 같아요.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;RadioButton&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;체크박스는 여러 개를 동시에 체크 가능하지만 라디오버튼은 그룹 내에서 하나만 선택 가능합니다. 따라서 라디오버튼이 하나가 선택이되면 나머지 라디오버튼은 선택이 해제가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589867373244&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;RadioGroup
	android:id=&quot;@+id/radiogroup&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;&amp;gt;

    &amp;lt;RadioButton
        android:id=&quot;@+id/male&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;남자&quot; /&amp;gt;

    &amp;lt;RadioButton
        android:id=&quot;@+id/female&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;여자&quot; /&amp;gt;

&amp;lt;/RadioGroup&amp;gt;

&amp;lt;Button
    android:id=&quot;@+id/btn_rb&quot;
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;radiobutton&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;MainActivity.java&lt;/p&gt;
&lt;pre id=&quot;code_1589867663687&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;RadioButton rb_male, rb_female;
Button btn_rb;
RadioGroup radioGroup;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589867691930&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rb_male = findViewById(R.id.male);
rb_female = findViewById(R.id.female);
btn_rb = findViewById(R.id.btn_rb);
radioGroup = findViewById(R.id.radiogroup);&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589867786010&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;btn_rb.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String radiobutton = &quot;&quot;;
        if (rb_male.isChecked()) {
            radiobutton += rb_male.getText();
        }
        else if (rb_female.isChecked()) {
            radiobutton += rb_female.getText();
        }
    textView.setText(radiobutton);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;RadioButton은 어짜피 하나 밖에 선택안되기 때문에 else if를 씁니다.&lt;/p&gt;
&lt;p&gt;실행시키면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br7spt/btqEh6NZK9G/fda0CxA41uQWkdNXNj1Owk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br7spt/btqEh6NZK9G/fda0CxA41uQWkdNXNj1Owk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br7spt/btqEh6NZK9G/fda0CxA41uQWkdNXNj1Owk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/br7spt/btqEh6NZK9G/fda0CxA41uQWkdNXNj1Owk/img.gif&quot; data-origin-width=&quot;314&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 다른 방법으로는 switch 문으로도 작성이 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589868331777&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
		switch (checkedId) {
			case R.id.male : {
                textView.setText(rb_male.getText());
                break;
            }
            case R.id.female : {
                textView.setText(rb_female.getText());
                break;
            }

        }
   }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;setOnCheckedChangeListener는 값이 바뀔 때마다 함수가 실행되기 때문에 라디오버튼을 누를 때마다 TextView의 text가 바뀝니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CalendarView&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CalendarView는 달력을 보여주는 위젯입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589874370180&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;CalendarView
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위젯을 추가하고 실행결과만 확인해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0pjnM/btqEeYjPHnX/zKyk2r6T4zsFkUSV06oPak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0pjnM/btqEeYjPHnX/zKyk2r6T4zsFkUSV06oPak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0pjnM/btqEeYjPHnX/zKyk2r6T4zsFkUSV06oPak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0pjnM%2FbtqEeYjPHnX%2FzKyk2r6T4zsFkUSV06oPak%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;기본적으로 &lt;/span&gt;오늘 날짜가 잡혀있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Drawable&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;드로어블은 상태에 따라 그래픽이나 이미지가 선택적으로 보이게 해줍니다. 예를 들어 버튼이 눌려진 상태를 보여주고 싶을 때 사용하는 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;상태 드로어블(StateListDrawable)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;뷰의 상태에 따라 뷰에 보여줄 그래픽을 다르게 지정 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;609&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2gC7t/btqEfrsDLs1/qcSYHtcBqvKzOPfCYV6CAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2gC7t/btqEfrsDLs1/qcSYHtcBqvKzOPfCYV6CAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2gC7t/btqEfrsDLs1/qcSYHtcBqvKzOPfCYV6CAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2gC7t%2FbtqEfrsDLs1%2FqcSYHtcBqvKzOPfCYV6CAk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;609&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;drawable 폴더를 마우스 우클릭하여 New -&amp;gt; Drawable Resource File을 클릭해줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;613&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vEd8j/btqEh8d4UGQ/nkPP3K9Z7viRJ2FFOQEvK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vEd8j/btqEh8d4UGQ/nkPP3K9Z7viRJ2FFOQEvK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vEd8j/btqEh8d4UGQ/nkPP3K9Z7viRJ2FFOQEvK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvEd8j%2FbtqEh8d4UGQ%2FnkPP3K9Z7viRJ2FFOQEvK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;613&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이름은 state_drawable이라고 하고 OK를 눌러주겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;678&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvzwPc/btqEeZiXnym/jF3Vs5MH1NPUwLWfdFfJWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvzwPc/btqEeZiXnym/jF3Vs5MH1NPUwLWfdFfJWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvzwPc/btqEeZiXnym/jF3Vs5MH1NPUwLWfdFfJWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvzwPc%2FbtqEeZiXnym%2FjF3Vs5MH1NPUwLWfdFfJWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;678&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 이런 화면이 뜰텐데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rxfui/btqEghJRegQ/kvUtzyY5I5p9ychPcwITA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rxfui/btqEghJRegQ/kvUtzyY5I5p9ychPcwITA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rxfui/btqEghJRegQ/kvUtzyY5I5p9ychPcwITA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frxfui%2FbtqEghJRegQ%2FkvUtzyY5I5p9ychPcwITA1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우측 상단의 이 버튼을 클릭하면 코드를 작성할 수 있는 창이 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;state_drawable.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589874918182&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;selector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;&amp;gt;
    &amp;lt;item android:state_pressed=&quot;true&quot;
        android:drawable=&quot;@drawable/ic_launcher_background&quot; /&amp;gt;
    &amp;lt;item android:drawable=&quot;@drawable/ic_launcher_foreground&quot; /&amp;gt;
&amp;lt;/selector&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 이와 같이 코드를 입력해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;selector 내부의 item이 두 가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하나는 state_pressed=&quot;true&quot;, 즉 눌려진 상태일 때, @drawable/ic_launcher_background을 보여주고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다른 하나는 눌려지지 않았을 때 겠죠? 그 때는 @drawable/ic_launcher_foreground을 보여줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;707&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elYjLc/btqEgQL062y/ajqmPKuMNmyuyAJnZSZrN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elYjLc/btqEgQL062y/ajqmPKuMNmyuyAJnZSZrN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elYjLc/btqEgQL062y/ajqmPKuMNmyuyAJnZSZrN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelYjLc%2FbtqEgQL062y%2FajqmPKuMNmyuyAJnZSZrN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;707&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 activity_main.xml 파일로 돌아가 버튼을 추가해주겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;activity_main.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589875034619&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Button
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:background=&quot;@drawable/state_drawable&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;background 속성에 방금 생성했던 state_drawable.xml 파일로 설정해주시면 완료입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실행해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;SmartSelect_20200519-170059_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRG1gC/btqEfrGgcyQ/LbUwIp5scQEr2ZBmmO42m1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRG1gC/btqEfrGgcyQ/LbUwIp5scQEr2ZBmmO42m1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRG1gC/btqEfrGgcyQ/LbUwIp5scQEr2ZBmmO42m1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cRG1gC/btqEfrGgcyQ/LbUwIp5scQEr2ZBmmO42m1/img.gif&quot; data-filename=&quot;SmartSelect_20200519-170059_Gallery[1].gif&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;640&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;셰이프 드로어블(ShapeDrawable)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;XML로 도형을 그릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;686&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drmHat/btqEg2rR3tj/rM40SlnvZnmhY6WOrSLTO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drmHat/btqEg2rR3tj/rM40SlnvZnmhY6WOrSLTO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drmHat/btqEg2rR3tj/rM40SlnvZnmhY6WOrSLTO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrmHat%2FbtqEg2rR3tj%2FrM40SlnvZnmhY6WOrSLTO0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;686&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;shape_drawable이라는 이름으로 xml 파일을 만들어줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;shape_drawable.xml&lt;/p&gt;
&lt;pre id=&quot;code_1589875402946&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;shape xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:shape=&quot;rectangle&quot;&amp;gt;
    &amp;lt;size android:width=&quot;200dp&quot; android:height=&quot;120dp&quot;/&amp;gt;
    &amp;lt;stroke android:width=&quot;1dp&quot; android:color=&quot;#FF0000&quot;/&amp;gt;
    &amp;lt;solid android:color=&quot;#FAD844&quot;/&amp;gt;
    &amp;lt;padding android:bottom=&quot;5dp&quot;/&amp;gt;
&amp;lt;/shape&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이라고 입력해주면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;387&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wQ2q0/btqEeq103xb/yyAPf3VgWGKZb1gV9Y50s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wQ2q0/btqEeq103xb/yyAPf3VgWGKZb1gV9Y50s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wQ2q0/btqEeq103xb/yyAPf3VgWGKZb1gV9Y50s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwQ2q0%2FbtqEeq103xb%2FyyAPf3VgWGKZb1gV9Y50s1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;387&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이러한 도형이 만들어진 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;코드의 의미는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;lt;shape &lt;/span&gt;&lt;span&gt;xmlns:&lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;=&quot;&lt;a href=&quot;http://schemas.android.com/apk/res/android&quot;&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;&quot;&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;shape&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;rectangle&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;gt; //사각형 모양의 도형을 만듦&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;b&gt;size &lt;/b&gt;&lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;width&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;200dp&quot; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;height&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;120dp&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;/&amp;gt; //가로는 200dp, 세로는 120dp 크기를 가짐&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;b&gt;stroke &lt;/b&gt;&lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;width&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;1dp&quot; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;color&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;#FF0000&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;/&amp;gt; //테두리는 1dp 굵기로 빨간색&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;b&gt;solid &lt;/b&gt;&lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;color&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;#FAD844&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;/&amp;gt; //도형 내부의 색깔은 노란색&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;lt;&lt;b&gt;padding &lt;/b&gt;&lt;/span&gt;&lt;span&gt;android&lt;/span&gt;&lt;span&gt;:&lt;b&gt;bottom&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;=&quot;5dp&quot;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;/&amp;gt; //아래쪽에 5dp만큼 공간을 띄움&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&amp;lt;/shape&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;activity_main.xml로 돌아가서 밑과 같이 입력해주세요.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589875710343&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;ImageView
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:src=&quot;@drawable/shape_drawable&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 실행시켜보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;279&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nFCPX/btqEeZwn4D3/PtSZBcfdR6zcTbAC4a10uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nFCPX/btqEeZwn4D3/PtSZBcfdR6zcTbAC4a10uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nFCPX/btqEeZwn4D3/PtSZBcfdR6zcTbAC4a10uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnFCPX%2FbtqEeZwn4D3%2FPtSZBcfdR6zcTbAC4a10uk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;279&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;방금 만든 도형이 나타나는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;drawable은 이미지나 그래픽을 사용해서 좀 더 다양한 효과를 줄 수 있어 실제 앱을 만들 때 자주 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음 포스트에서 이어서 진행하겠습니다. :D&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - [DSC] 또 다른 위젯(Widget)과 그래들(Gradle)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589879391709&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[DSC] 또 다른 위젯(Widget)과 그래들(Gradle)&quot; data-og-description=&quot;[Android] - [DSC] 위젯(Widget) 익히기 [DSC] 위젯(Widget) 익히기 1. 위젯(Widget) 익히기 저번 주에는 TextView와 Button만 이용해봤었는데 이번에는 EditText, ImageView, ImageButton, CheckBox, RadioButton..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/21&quot; data-og-url=&quot;https://rina214.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmJi28/hyF6lo6vDS/m8wKEGTbYa58RGdB9iLjL0/img.gif?width=314&amp;amp;height=640&amp;amp;face=0_0_314_640,https://scrap.kakaocdn.net/dn/bjE5TX/hyF6qDWNKh/yWpBKmvdznENYVodV4mkAk/img.gif?width=314&amp;amp;height=640&amp;amp;face=0_0_314_640,https://scrap.kakaocdn.net/dn/dkGbmF/hyF6jx2eTX/mTb4wsMx1eYyqMmSpikN40/img.png?width=1920&amp;amp;height=1029&amp;amp;face=0_0_1920_1029&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmJi28/hyF6lo6vDS/m8wKEGTbYa58RGdB9iLjL0/img.gif?width=314&amp;amp;height=640&amp;amp;face=0_0_314_640,https://scrap.kakaocdn.net/dn/bjE5TX/hyF6qDWNKh/yWpBKmvdznENYVodV4mkAk/img.gif?width=314&amp;amp;height=640&amp;amp;face=0_0_314_640,https://scrap.kakaocdn.net/dn/dkGbmF/hyF6jx2eTX/mTb4wsMx1eYyqMmSpikN40/img.png?width=1920&amp;amp;height=1029&amp;amp;face=0_0_1920_1029');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[DSC] 또 다른 위젯(Widget)과 그래들(Gradle)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;[Android] - [DSC] 위젯(Widget) 익히기 [DSC] 위젯(Widget) 익히기 1. 위젯(Widget) 익히기 저번 주에는 TextView와 Button만 이용해봤었는데 이번에는 EditText, ImageView, ImageButton, CheckBox, RadioButton..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>CalendarView</category>
      <category>CheckBox</category>
      <category>drawable</category>
      <category>EditText</category>
      <category>ImageView</category>
      <category>radiobutton</category>
      <category>radiogroup</category>
      <category>Widget</category>
      <category>안드로이드스튜디오</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/20</guid>
      <comments>https://rina214.tistory.com/20#entry20comment</comments>
      <pubDate>Mon, 18 May 2020 23:56:22 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 안드로이드 스튜디오와 친해지기 2</title>
      <link>https://rina214.tistory.com/19</link>
      <description>&lt;p&gt;DSC 2기 App Session 1주차_2&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - [DSC] 안드로이드 스튜디오와 친해지기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589211623140&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[DSC] 안드로이드 스튜디오와 친해지기&quot; data-og-description=&quot;DSC 2기 App Session 1주차 1. 안드로이드 스튜디오 설치하기 안드로이드 스튜디오를 시작하기 위해 다음 포스트를 참고해주세요! [Android] - 안드로이드 스튜디오 설치하기 안드로이드 스튜디오 설치하기 저는..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/16&quot; data-og-url=&quot;https://rina214.tistory.com/16&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/y58oC/hyF0iGvk4k/Fbon5y00bkTkKF0k5SeqU1/img.png?width=800&amp;amp;height=505&amp;amp;face=0_0_800_505,https://scrap.kakaocdn.net/dn/kUZlR/hyF1t7uakf/biBWkDFC4crgVfnSmS4SJ1/img.png?width=800&amp;amp;height=505&amp;amp;face=0_0_800_505,https://scrap.kakaocdn.net/dn/cUBGEi/hyF0ht4kiM/DNZa1HX2fg9y4BFKfWHZd0/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/16&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/y58oC/hyF0iGvk4k/Fbon5y00bkTkKF0k5SeqU1/img.png?width=800&amp;amp;height=505&amp;amp;face=0_0_800_505,https://scrap.kakaocdn.net/dn/kUZlR/hyF1t7uakf/biBWkDFC4crgVfnSmS4SJ1/img.png?width=800&amp;amp;height=505&amp;amp;face=0_0_800_505,https://scrap.kakaocdn.net/dn/cUBGEi/hyF0ht4kiM/DNZa1HX2fg9y4BFKfWHZd0/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[DSC] 안드로이드 스튜디오와 친해지기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;DSC 2기 App Session 1주차 1. 안드로이드 스튜디오 설치하기 안드로이드 스튜디오를 시작하기 위해 다음 포스트를 참고해주세요! [Android] - 안드로이드 스튜디오 설치하기 안드로이드 스튜디오 설치하기 저는..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이전 포스트에 이어서 계속 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. View 익히기&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;뷰(View)&lt;/b&gt;&lt;/span&gt;는 &lt;span&gt;&lt;/span&gt;&lt;span&gt;일반적으로 컨트롤이나 위젯으로 불리는 &lt;/span&gt;&lt;span&gt;UI &lt;/span&gt;&lt;span&gt;구성요소입니다. &lt;/span&gt;&lt;span&gt;사용자의 눈에 보이는 화면의 구성 요소이죠.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이 뷰를 여러 개 포함하는 것을 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;뷰그룹(ViewGroup)&lt;/b&gt;&lt;/span&gt;이라고 합니다. 뷰그룹 안에서는 뷰의 위치를 지정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그리고 뷰그룹 안에 뷰그룹을 넣을 수도 있어 장점이 많이 생깁니다. 덕분에 뷰그룹은 뷰를 상속해서 뷰그룹도 뷰처럼 다룰 수 있습니다. 예를 들어 버튼은 텍스트뷰를 상속받았기 때문에 텍스트뷰의 속성을 모두 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;안드로이드는 뷰와 뷰그룹의 역할을 구분하기 위해 뷰의 종류에 따라 다른 이름으로 부르기도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;위젯(Widget)&lt;/b&gt; : &lt;/span&gt;뷰 중에서 일반적인 컨트롤의 역할&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;레이아웃(Layout)&lt;/b&gt;&lt;/span&gt; : 뷰그룹 중에서 내부에 뷰들을 포함하고 있으면서 그것들을 배치하는 역할&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;뷰의 크기 속성&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;layout_width&lt;/b&gt;&lt;/span&gt;&lt;span&gt; : 뷰의 가로길이이며 필수적으로 입력해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;layout_height&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 뷰의 세로 길이이며 필수적으로 입력해야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;뷰의 속성을 이해하기 위해서는 LinearLayout이 편하기 때문에 activity_main.xml 파일에서 &lt;b&gt;Component Tree&lt;/b&gt;의 &lt;b&gt;ConstraintLayout&lt;/b&gt;을 Convert view하여 &lt;b&gt;LinearLayout&lt;/b&gt;으로 바꿔주겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;248&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kD61A/btqD5Jzn8AA/wMRWjTPc3xkgq58WedsLVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kD61A/btqD5Jzn8AA/wMRWjTPc3xkgq58WedsLVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kD61A/btqD5Jzn8AA/wMRWjTPc3xkgq58WedsLVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkD61A%2FbtqD5Jzn8AA%2FwMRWjTPc3xkgq58WedsLVK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;248&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 버튼을 하나만 남겨놓겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3nCU/btqD2H3T9hE/OvMJTN91i4W8MBIgYK5XA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3nCU/btqD2H3T9hE/OvMJTN91i4W8MBIgYK5XA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3nCU/btqD2H3T9hE/OvMJTN91i4W8MBIgYK5XA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3nCU%2FbtqD2H3T9hE%2FOvMJTN91i4W8MBIgYK5XA1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;제 화면과 동일하게 나타나나요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 버튼의 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Attributes&lt;/b&gt;&lt;/span&gt;를 보시면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;305&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tA44w/btqD4UODIrK/teilrCbRt7NrmCfdRRowkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tA44w/btqD4UODIrK/teilrCbRt7NrmCfdRRowkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tA44w/btqD4UODIrK/teilrCbRt7NrmCfdRRowkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtA44w%2FbtqD4UODIrK%2FteilrCbRt7NrmCfdRRowkk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;305&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;width와 height 모두 wrap_content 임을 알 수 있습니다. 이게 기본값인데 버튼의 내용물의 양만큼 크기가 커질 수 있습니다.&lt;/p&gt;
&lt;p&gt;두 속성 모두 match_parent로 바꾸면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/51xXK/btqD2wnSXxp/kgkHR8KVgmK2MK7ClzOrl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/51xXK/btqD2wnSXxp/kgkHR8KVgmK2MK7ClzOrl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/51xXK/btqD2wnSXxp/kgkHR8KVgmK2MK7ClzOrl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F51xXK%2FbtqD2wnSXxp%2FkgkHR8KVgmK2MK7ClzOrl0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼이 폰 화면의 크기만큼 바뀐 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;크기를 숫자로도 지정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AlGR4/btqD4x7dfIT/SRakHAsuuS710cKHJVAKc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AlGR4/btqD4x7dfIT/SRakHAsuuS710cKHJVAKc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AlGR4/btqD4x7dfIT/SRakHAsuuS710cKHJVAKc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAlGR4%2FbtqD4x7dfIT%2FSRakHAsuuS710cKHJVAKc1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 100dp라고 입력해주시면 100dp의 크기만큼 버튼의 크기가 결정됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;숫자로 크기를 정하려면 단위를 사용해서 지정해야 합니다.&lt;/span&gt;&lt;span&gt; dp도 여러 단위 중 하나입니다. &lt;span&gt;일반적으로 단말마다 해상도나 화면의 크기가 다르기 때문에 &lt;/span&gt;&lt;span&gt;wrap_content&lt;/span&gt;&lt;span&gt;나 &lt;/span&gt;&lt;span&gt;match_parent&lt;/span&gt;&lt;span&gt;를 사용하여 전체 화면을 기준으로 뷰를 배치할 수 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;하지만 크기를 직접 지정할 때도 &lt;/span&gt;&lt;span&gt;px&lt;/span&gt;&lt;span&gt;가 아닌 &lt;/span&gt;&lt;span&gt;dp&lt;/span&gt;&lt;span&gt;나 &lt;/span&gt;&lt;span&gt;sp &lt;/span&gt;&lt;span&gt;단위를 사용하면 해상도가 다른 단말에서도 뷰의 크기를 비슷하게 보이도록 만들 수 있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;단위&lt;br /&gt;px (픽셀)&amp;nbsp;:&amp;nbsp;화면 픽셀의 수&lt;br /&gt;dp&amp;nbsp;또는&amp;nbsp;dip (밀도 독립적 픽셀)&amp;nbsp;: 160dpi&amp;nbsp;화면을 기준으로 한 픽셀&lt;br /&gt;즉 해상도가&amp;nbsp;160dpi인 작은 화면에서는&amp;nbsp;20픽셀이던 버튼 크기를&amp;nbsp;320dpi인 약간 큰 화면에서는&amp;nbsp;40픽셀의 크기로 보이게 합니다.&lt;br /&gt;sp&amp;nbsp;또는&amp;nbsp;sip (축척 독립적 픽셀) :&amp;nbsp;텍스트 크기를 지정할 때 사용하는 단위. dp와 유사하나 글꼴의 설정에 따라&amp;nbsp;1sp당 픽셀 수가 달라짐.&lt;br /&gt;in (인치)&amp;nbsp;: 1인치로 된 물리적 길이&lt;br /&gt;mm (밀리미터)&amp;nbsp;: 1밀리미터로 된 물리적 길이&lt;br /&gt;ems (텍스트 크기)&amp;nbsp;:&amp;nbsp;글꼴과 상관없이 동일한 텍스트 크기 표시&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보통 뷰에는 &lt;b&gt;dp&lt;/b&gt;, 글자 크기는 &lt;b&gt;sp &lt;/b&gt;단위를 주로 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;뷰의 마진(margin) 속성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;margin&lt;/b&gt; 속성은 뷰로부터 주변을 얼마나 떨어뜨릴지 지정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCBvje/btqD4UHXKK3/Ml3EZzWKHWKVnqYI6Os8w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCBvje/btqD4UHXKK3/Ml3EZzWKHWKVnqYI6Os8w0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCBvje/btqD4UHXKK3/Ml3EZzWKHWKVnqYI6Os8w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCBvje%2FbtqD4UHXKK3%2FMl3EZzWKHWKVnqYI6Os8w0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위 사진은 위쪽과 왼쪽으로부터 100dp씩 margin을 준 화면입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. 레이아웃(Layout) 익히기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 제약 레이아웃(ConstraintLayout)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;제약 레이아웃은 안드로이드 스튜디오에서 자동으로 설정해주는 기본 레이아웃입니다.&lt;/p&gt;
&lt;p&gt;제약 레이아웃의 가장 큰 특징은 뷰의 크기와 위치를 결정할 때 &lt;b&gt;제약 조건(Constraint)&lt;/b&gt;을 &lt;span&gt;사용해 화면을 구성한다는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - 안드로이드 스튜디오 제약 레이아웃(ConstraintLayout)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589217478575&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;안드로이드 스튜디오 제약 레이아웃(ConstraintLayout)&quot; data-og-description=&quot;제약 레이아웃은 안드로이드 스튜디오의 기본 레이아웃입니다. 제약 레이아웃의 가장 큰 특징은 뷰의 크기와 위치를 결정할 때 제약 조건(Constraint)을 사용한다는 것입니다. 제약 조건이란 뷰가 &quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/17&quot; data-og-url=&quot;https://rina214.tistory.com/17&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/z7ygk/hyF0csLhqU/8dQfNyirKUi3vKoLKViEJK/img.png?width=%!s(float64=333)&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590,https://scrap.kakaocdn.net/dn/cn3dug/hyF0qq3om7/S6ILzrWCtin0lvAAAVMFM0/img.png?width=%!s(float64=333)&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590,https://scrap.kakaocdn.net/dn/ccmDWo/hyF0pZZcBm/ejsw0WfgwXFS3YCbOs70ak/img.png?width=%!s(float64=333)&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/17&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/17&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/z7ygk/hyF0csLhqU/8dQfNyirKUi3vKoLKViEJK/img.png?width=%!s(float64=333')&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590,https://scrap.kakaocdn.net/dn/cn3dug/hyF0qq3om7/S6ILzrWCtin0lvAAAVMFM0/img.png?width=%!s(float64=333)&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590,https://scrap.kakaocdn.net/dn/ccmDWo/hyF0pZZcBm/ejsw0WfgwXFS3YCbOs70ak/img.png?width=%!s(float64=333)&amp;amp;height=%!s(float64=590)&amp;amp;face=0_0_333_590);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;안드로이드 스튜디오 제약 레이아웃(ConstraintLayout)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;제약 레이아웃은 안드로이드 스튜디오의 기본 레이아웃입니다. 제약 레이아웃의 가장 큰 특징은 뷰의 크기와 위치를 결정할 때 제약 조건(Constraint)을 사용한다는 것입니다. 제약 조건이란 뷰가&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 리니어 레이아웃(LinearLayout)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;리니어 레이아웃은 &lt;span style=&quot;color: #333333;&quot;&gt;뷰가 차지할 수 있는 사각형 영역을 할당한 후, &lt;/span&gt;한쪽 방향으로 차례대로 뷰를 추가하면서 화면을 구성하는 레이아웃입니다.&amp;nbsp;&lt;b&gt;가장 많이 사용하는 레이아웃입니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/18&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - 안드로이드 스튜디오 리니어 레이아웃(LinearLayout)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589221225046&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;안드로이드 스튜디오 리니어 레이아웃(LinearLayout)&quot; data-og-description=&quot;리니어 레이아웃은 뷰가 차지할 수 있는 사각형 영역을 할당한 후, 한 쪽 방향으로 차례대로 뷰를 추가하면서 화면을 구성하는 레이아웃입니다. 보통 가장 많이 사용하는 레이아웃입니다. 1. 방�&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/18&quot; data-og-url=&quot;https://rina214.tistory.com/18&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ezJGm/hyF0otemPG/HdljwErJ2GrXkRuBAkK4j1/img.png?width=%!s(float64=800)&amp;amp;height=%!s(float64=478)&amp;amp;face=0_0_800_478,https://scrap.kakaocdn.net/dn/c5vvhz/hyF0fJPXNN/sKDgjEKvvHHkuvvGxCHNf0/img.png?width=%!s(float64=800)&amp;amp;height=%!s(float64=478)&amp;amp;face=0_0_800_478,https://scrap.kakaocdn.net/dn/buy5fB/hyF1DPPQF4/yGjXQ7DhNsmUgg7xXkqkA0/img.png?width=%!s(float64=1394)&amp;amp;height=%!s(float64=834)&amp;amp;face=0_0_1394_834&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/18&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/18&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ezJGm/hyF0otemPG/HdljwErJ2GrXkRuBAkK4j1/img.png?width=%!s(float64=800')&amp;amp;height=%!s(float64=478)&amp;amp;face=0_0_800_478,https://scrap.kakaocdn.net/dn/c5vvhz/hyF0fJPXNN/sKDgjEKvvHHkuvvGxCHNf0/img.png?width=%!s(float64=800)&amp;amp;height=%!s(float64=478)&amp;amp;face=0_0_800_478,https://scrap.kakaocdn.net/dn/buy5fB/hyF1DPPQF4/yGjXQ7DhNsmUgg7xXkqkA0/img.png?width=%!s(float64=1394)&amp;amp;height=%!s(float64=834)&amp;amp;face=0_0_1394_834);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;안드로이드 스튜디오 리니어 레이아웃(LinearLayout)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;리니어 레이아웃은 뷰가 차지할 수 있는 사각형 영역을 할당한 후, 한 쪽 방향으로 차례대로 뷰를 추가하면서 화면을 구성하는 레이아웃입니다. 보통 가장 많이 사용하는 레이아웃입니다. 1. 방�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) 상대 레이아웃(RelativeLayout)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;상대 레이아웃은 부모 컨테이너나 다른 뷰와의 상대적 위치로 화면을 구성합니다. 상대 레이아웃의 특성을 모두 가지고 더 많은 기능을 제공하는 &lt;span style=&quot;color: #333333;&quot;&gt;제약 레이아웃이&lt;span&gt; 생기면서 상대 레이아웃은 주로 권장하지는 않습니다. 하지만 단순하고 이해하기 쉽기 때문에 아직 많이 사용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;4) 프레임 레이아웃(FrameLayout)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;프레임 레이아웃은 가장 상위에 있는 하나의 뷰 또는 뷰그룹만 보여줍니다. 여러 개의 뷰가 존재한다면 중첩하여 쌓이게 되는데 각 뷰를 전환하여 보여주는 방식으로 자주 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;5) 테이블 레이아웃(TableLayout)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;테이블 레이아웃은 격자 모양의 배열을 사용하여 화면을 구성합니다. HTML에서 사용하는 정렬 방식과 유사하지만 많이 사용하지는 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6) 스크롤뷰(ScrollView)&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;스크롤뷰는 레이아웃은 아니지만 뷰그룹의 역할을 합니다. 스크롤뷰의 내부에는 하나의 뷰 또는 뷰그룹만 넣을 수 있고 해당 뷰의 내용물이 화면보다 많아지게 되면 스크롤을 자동으로 만들어줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kVrd1/btqD4zDYk9f/6Dlk5PcADO2zkPIyP5anS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kVrd1/btqD4zDYk9f/6Dlk5PcADO2zkPIyP5anS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kVrd1/btqD4zDYk9f/6Dlk5PcADO2zkPIyP5anS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkVrd1%2FbtqD4zDYk9f%2F6Dlk5PcADO2zkPIyP5anS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 만드는 경우는 없겠지만 예시를 위해 TextView를 16개를 만들어보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T2Ma8/btqD5H9mYue/Qwm7GHdlv0ehPMPK0BaE11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T2Ma8/btqD5H9mYue/Qwm7GHdlv0ehPMPK0BaE11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T2Ma8/btqD5H9mYue/Qwm7GHdlv0ehPMPK0BaE11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT2Ma8%2FbtqD5H9mYue%2FQwm7GHdlv0ehPMPK0BaE11%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스크롤뷰를 쓰지 않았다면 이렇게 보이는 게 전부였겠지만&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;304&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzqYA9/btqD2HpcgSF/CUTUEs7bSM6YwhDGBDlU30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzqYA9/btqD2HpcgSF/CUTUEs7bSM6YwhDGBDlU30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzqYA9/btqD2HpcgSF/CUTUEs7bSM6YwhDGBDlU30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzqYA9%2FbtqD2HpcgSF%2FCUTUEs7bSM6YwhDGBDlU30%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;304&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스크롤뷰 덕분에 16까지 모두 볼 수 있게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;뷰의 영역 익히기&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;뷰에는 보이지 않는 테두리(Border)가 존재합니다. 이것을 흔히 뷰의 영역(Box)라고 하는데 테두리를 기준으로 바깥쪽과&amp;nbsp;안쪽 공간이 있습니다. 바깥쪽 공간을 마진(Margin), 안쪽 공간을 패딩(Padding)이라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFEXY/btqD4UA9H1N/nRWmMdCKkJRvyFuFqdPj0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFEXY/btqD4UA9H1N/nRWmMdCKkJRvyFuFqdPj0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFEXY/btqD4UA9H1N/nRWmMdCKkJRvyFuFqdPj0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFEXY%2FbtqD4UA9H1N%2FnRWmMdCKkJRvyFuFqdPj0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1589219494608&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;
    &amp;lt;Button
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;BUTTON&quot;
        android:layout_margin=&quot;100dp&quot;
        android:padding=&quot;50dp&quot;/&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;위와 같이 xml 파일을 작성하게 되면 버튼의 바깥쪽은 100dp만큼 떨어지게 되고 버튼의 안쪽에는 50dp만큼의 공간이 생기게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이외의 속성들&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkehjl/btqD4VmwCrn/fBcSKVmkEUac9uVkKapmR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkehjl/btqD4VmwCrn/fBcSKVmkEUac9uVkKapmR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkehjl/btqD4VmwCrn/fBcSKVmkEUac9uVkKapmR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkehjl%2FbtqD4VmwCrn%2FfBcSKVmkEUac9uVkKapmR0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1589221453877&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:gravity=&quot;center&quot;&amp;gt;
    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Hello World!&quot;
        android:textSize=&quot;20sp&quot;
        android:textColor=&quot;#ffffff&quot;
        android:textStyle=&quot;bold&quot;
        android:background=&quot;#000000&quot; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;android:textSize&lt;/b&gt; : 텍스트의 크기를 설정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;android:textColor&lt;/b&gt; : 텍스트의 색을 설정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; #000000 : 검은색&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; #FFFFFF : 흰색&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEhtlj/btqD3dOWEgh/RPT96Jm7accFRmZhrutHvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEhtlj/btqD3dOWEgh/RPT96Jm7accFRmZhrutHvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEhtlj/btqD3dOWEgh/RPT96Jm7accFRmZhrutHvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEhtlj%2FbtqD3dOWEgh%2FRPT96Jm7accFRmZhrutHvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 왼쪽에 색상을 클릭해주시면 다른 색도 설정하실 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;android:textStyle&lt;/b&gt; : 텍스트의 스타일을 설정할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; normal: 기본&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; bold: 굵게&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; italic: 기울임&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;android:background&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;: 뷰의 배경을 설정할 수 있습니다. 색깔을 정할 수도 있고 사진으로도 변경 가능합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8uMeY/btqD4zcYcGa/z12e1jd1QA2iw2T3yi4H8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8uMeY/btqD4zcYcGa/z12e1jd1QA2iw2T3yi4H8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8uMeY/btqD4zcYcGa/z12e1jd1QA2iw2T3yi4H8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8uMeY%2FbtqD4zcYcGa%2Fz12e1jd1QA2iw2T3yi4H8k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1589221783666&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:gravity=&quot;center&quot;&amp;gt;
    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Hello World!&quot;
        android:textSize=&quot;20sp&quot;
        android:textColor=&quot;#FF0000&quot;
        android:textStyle=&quot;italic&quot;
        android:background=&quot;@mipmap/ic_launcher&quot; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;background의 @mipmap은 안드로이드 스튜디오의 폴더 이름입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IPwRi/btqD4xTHH4t/G9NTRJ0rfMvqry2sL75Un0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IPwRi/btqD4xTHH4t/G9NTRJ0rfMvqry2sL75Un0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IPwRi/btqD4xTHH4t/G9NTRJ0rfMvqry2sL75Un0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIPwRi%2FbtqD4xTHH4t%2FG9NTRJ0rfMvqry2sL75Un0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;res/mipmap/ic_launcher의 사진을 갖고 온 것입니다.&lt;/p&gt;</description>
      <category>Android</category>
      <category>1주차</category>
      <category>android studio</category>
      <category>DSC</category>
      <category>안드로이드 스튜디오</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/19</guid>
      <comments>https://rina214.tistory.com/19#entry19comment</comments>
      <pubDate>Tue, 12 May 2020 03:32:15 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 스튜디오 리니어 레이아웃(LinearLayout)</title>
      <link>https://rina214.tistory.com/18</link>
      <description>&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;리니어 레이아웃은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;뷰가 차지할 수 있는 사각형 영역을 할당한 후,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;한 쪽 방향으로 차례대로 뷰를 추가하면서 화면을 구성하는 레이아웃입니다. 보통 &lt;/span&gt;가장 많이 사용하는 레이아웃입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 방향 설정하기&lt;/h2&gt;
&lt;p&gt;리니어 레이아웃에서 &lt;b&gt;orientation&lt;/b&gt;이라는 필수 속성이 있습니다. 레이아웃 내부의 뷰가 배치될 방향을 설정하는 속성입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi2jMH/btqD4xGbihq/Op3U8k6fBDjd1wpRnlnzL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi2jMH/btqD4xGbihq/Op3U8k6fBDjd1wpRnlnzL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi2jMH/btqD4xGbihq/Op3U8k6fBDjd1wpRnlnzL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi2jMH%2FbtqD4xGbihq%2FOp3U8k6fBDjd1wpRnlnzL1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;horizontal로 하면 가로 방향으로,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DkAud/btqD3HCislZ/rIZxafhwleIJIGO25EOVkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DkAud/btqD3HCislZ/rIZxafhwleIJIGO25EOVkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DkAud/btqD3HCislZ/rIZxafhwleIJIGO25EOVkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDkAud%2FbtqD3HCislZ%2FrIZxafhwleIJIGO25EOVkK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;vertical로 설정하면 세로 방향으로 배치됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 뷰 정렬하기&lt;/h2&gt;
&lt;p&gt;LinearLayout에서는 뷰의 방향을 지정하여 정렬할 수 있습니다. 무게 중심을 주는 의미인데 &lt;b&gt;gravity&lt;/b&gt;와 &lt;b&gt;layout_gravity&lt;/b&gt;라는 속성이 있습니다. gravity는 뷰 안의 내용물을 정렬하고, layout_gravity는 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아서 여유 공간이 생겼을 때 여유 공간 안에서 뷰를 정렬합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;gravity&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vOkhI/btqD55baCk4/796SjXy1ANb7dqU50JyNx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vOkhI/btqD55baCk4/796SjXy1ANb7dqU50JyNx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vOkhI/btqD55baCk4/796SjXy1ANb7dqU50JyNx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvOkhI%2FbtqD55baCk4%2F796SjXy1ANb7dqU50JyNx0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;LinearLayout의 gravity를 center로 줬습니다. 그러면 LinearLayout의 내용물인 두 개의 Button이 LinearLayout의 중앙으로 오게 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9Q6Qt/btqD6Qq1igZ/dQTJhhxXNi8piD6gTu8WT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9Q6Qt/btqD6Qq1igZ/dQTJhhxXNi8piD6gTu8WT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9Q6Qt/btqD6Qq1igZ/dQTJhhxXNi8piD6gTu8WT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9Q6Qt%2FbtqD6Qq1igZ%2FdQTJhhxXNi8piD6gTu8WT0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Button의 gravity를 right로 줬습니다. 이번엔 Button의 내용물인 &quot;BUTTON&quot;이라는 text가 오른쪽으로 정렬된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;layout_gravity&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RSSxu/btqD2vJkosA/oqOKuLyPRokv5OUosBjPZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RSSxu/btqD2vJkosA/oqOKuLyPRokv5OUosBjPZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RSSxu/btqD2vJkosA/oqOKuLyPRokv5OUosBjPZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRSSxu%2FbtqD2vJkosA%2FoqOKuLyPRokv5OUosBjPZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Button의 layout_gravity 속성을 right와 center로 주었더니 위와 같이 정렬된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;gravity와 layout_gravity의 차이를 아시겠나요??&lt;/p&gt;
&lt;p&gt;center와 right 이외에도 top, bottom, left, center_vertical, center_horizontal, fill, fill_vertical, fill_horizontal, clip_vertical, clip_horizontal이 있습니다. fill은 여유 공간만큼 확대해서 채우고 clip은 남는 부분을 잘라내는 속성입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 여유 공간 분할하기&lt;/h2&gt;
&lt;p&gt;여유 공간이 있을 때 &lt;b&gt;layout_weight&lt;/b&gt; 속성을 통해 뷰의 공간을 분할할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biQ35G/btqD4U8XIQo/IeDStTf9XMuBC1WmY7mXdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biQ35G/btqD4U8XIQo/IeDStTf9XMuBC1WmY7mXdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biQ35G/btqD4U8XIQo/IeDStTf9XMuBC1WmY7mXdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiQ35G%2FbtqD4U8XIQo%2FIeDStTf9XMuBC1WmY7mXdk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;LinearLayout의 방향을 horizontal로 했으면 가로방향으로 설정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;따라서 Button의 width를 0dp로 지정하고 layout_weight를 1로 주니 Button이 화면의 양쪽 크기만큼 늘어났습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;뷰가 하나일 때에는 weight의 의미가 없습니다. 하지만 버튼이 두개가 된다면 어떨까요&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qEuGE/btqD2Gqkays/QMDKKW9cvS368W5SqIhVN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qEuGE/btqD2Gqkays/QMDKKW9cvS368W5SqIhVN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qEuGE/btqD2Gqkays/QMDKKW9cvS368W5SqIhVN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqEuGE%2FbtqD2Gqkays%2FQMDKKW9cvS368W5SqIhVN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼의 가로 길이가 1:1만큼 분할되었습니다. 두 버튼 모두 weight 값이 1이기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xmhLB/btqD6P6Iujz/STONb7K927WBKcid4NTUK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xmhLB/btqD6P6Iujz/STONb7K927WBKcid4NTUK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xmhLB/btqD6P6Iujz/STONb7K927WBKcid4NTUK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxmhLB%2FbtqD6P6Iujz%2FSTONb7K927WBKcid4NTUK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;첫 번째 버튼의 layout_weight를 2로 주었습니다. 두 버튼의 가로길이가 화면의 2 : 1만큼 분할된 것을 확인할 수 있습니다.&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>Gravity</category>
      <category>layout_gravity</category>
      <category>layout_weight</category>
      <category>LinearLayout</category>
      <category>Orientation</category>
      <category>리니어 레이아웃</category>
      <category>안드로이드 스튜디오</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/18</guid>
      <comments>https://rina214.tistory.com/18#entry18comment</comments>
      <pubDate>Tue, 12 May 2020 03:20:06 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 스튜디오 제약 레이아웃(ConstraintLayout)</title>
      <link>https://rina214.tistory.com/17</link>
      <description>&lt;p&gt;제약 레이아웃은 안드로이드 스튜디오의 기본 레이아웃입니다.&lt;/p&gt;
&lt;p&gt;제약 레이아웃의 가장 큰 특징은 뷰의 크기와 위치를 결정할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;제약 조건(Constraint)&lt;/b&gt;을 사용한다는 것입니다.&lt;/p&gt;
&lt;p&gt;제약 조건이란 뷰가 레이아웃 안의 다른 요소와 어떻게 연결되는지 알려주는 것으로, 뷰의 연결점(Anchor Point)과 대상(Target)을 연결합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 제약 조건 걸기&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yUYlP/btqD55a7sFL/AMZponAYqta7jMeTyp2ADK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yUYlP/btqD55a7sFL/AMZponAYqta7jMeTyp2ADK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yUYlP/btqD55a7sFL/AMZponAYqta7jMeTyp2ADK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyUYlP%2FbtqD55a7sFL%2FAMZponAYqta7jMeTyp2ADK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;제약 레이아웃에서 버튼을 생성하면 다음과 같이 위, 아래, 왼쪽, 오른쪽에 동그라미로 표시된 연결점을 확인할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;연결점은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;핸들(Side Constraint Handle)&lt;/b&gt;이라고도 불리며 마우스 커서로 잡아서 조절할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;204&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cehbnR/btqD4zjG3Er/kVIA4XUpdvlAoGLPMXfBwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cehbnR/btqD4zjG3Er/kVIA4XUpdvlAoGLPMXfBwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cehbnR/btqD4zjG3Er/kVIA4XUpdvlAoGLPMXfBwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcehbnR%2FbtqD4zjG3Er%2FkVIA4XUpdvlAoGLPMXfBwk%2Fimg.png&quot; width=&quot;204&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 위로 잡아당기면 부모 레이아웃이 타깃이 되어 부모 레이아웃의 위쪽 벽면과 연결이 됩니다. 연결점과 타깃이 연결되면 연결선이 만들어지고 연결점은 파랗게 표시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QfC6S/btqD5IULmL1/4EdORWvpVDL3uBKgKNNO60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QfC6S/btqD5IULmL1/4EdORWvpVDL3uBKgKNNO60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QfC6S/btqD5IULmL1/4EdORWvpVDL3uBKgKNNO60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQfC6S%2FbtqD5IULmL1%2F4EdORWvpVDL3uBKgKNNO60%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼을 화면 가운데에 배치하려면 위, 아래, 왼쪽, 오른쪽 연결점을 모두 화면의 네 벽면에 연결하면 됩니다.&lt;/p&gt;
&lt;p&gt;(자석 아이콘(Autoconnect)이 활성화 되어있다면 첫 요소는 기본적으로 중앙에 옵니다.)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 바이어스(Bias) 설정하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbj9df/btqD3Hh3W5L/iMRtkCClZXeNDwH6qkFXkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbj9df/btqD3Hh3W5L/iMRtkCClZXeNDwH6qkFXkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbj9df/btqD3Hh3W5L/iMRtkCClZXeNDwH6qkFXkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbj9df%2FbtqD3Hh3W5L%2FiMRtkCClZXeNDwH6qkFXkK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Attributes의 Constraint Widget을 보시면 동그라미 안에 숫자 50이 들어있는 것을 확인할 수 있는데 이는 화면에서 얼마나 치우쳐 있는지 알 수 있는 바이어스(Bias)라는 것입니다. 바이어스를 위 사진과 같이 70만큼 오른쪽으로 바꿔주시면 70%만큼 오른쪽으로 치우치게 되는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 뷰의 크기 설정하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;254&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JpmGD/btqD3H95Q9x/4wf4qWLVEZuFwtAy00wfTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JpmGD/btqD3H95Q9x/4wf4qWLVEZuFwtAy00wfTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JpmGD/btqD3H95Q9x/4wf4qWLVEZuFwtAy00wfTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJpmGD%2FbtqD3H95Q9x%2F4wf4qWLVEZuFwtAy00wfTk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;254&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;뷰의 크기를 바꾸려면 뷰의 모서리&lt;span style=&quot;color: #333333;&quot;&gt;(파란색 네모)&lt;/span&gt;를 끌어당기면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8JB4d/btqD5H9ms87/2SEZn8U6JcbIVVWHgIZ4e0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8JB4d/btqD5H9ms87/2SEZn8U6JcbIVVWHgIZ4e0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8JB4d/btqD5H9ms87/2SEZn8U6JcbIVVWHgIZ4e0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8JB4d%2FbtqD5H9ms87%2F2SEZn8U6JcbIVVWHgIZ4e0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;245&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그러면 꺾은선에서&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; width=&quot;230&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2SsPW/btqD4U8W1xi/Y0fiQuEPCTy5c1NwBrR30k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2SsPW/btqD4U8W1xi/Y0fiQuEPCTy5c1NwBrR30k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2SsPW/btqD4U8W1xi/Y0fiQuEPCTy5c1NwBrR30k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2SsPW%2FbtqD4U8W1xi%2FY0fiQuEPCTy5c1NwBrR30k%2Fimg.png&quot; width=&quot;230&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;직선으로 바뀐 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;layout_width와 layout_height에 따라 이 모양이 바뀌는 것입니다.&lt;/p&gt;
&lt;p&gt;꺾은선은 wrap_content,&lt;/p&gt;
&lt;p&gt;직선은 크기 지정,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;237&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djOZwQ/btqD3IBbsDh/3Nj3sdHd4t1xWZJ27nZskK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djOZwQ/btqD3IBbsDh/3Nj3sdHd4t1xWZJ27nZskK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djOZwQ/btqD3IBbsDh/3Nj3sdHd4t1xWZJ27nZskK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjOZwQ%2FbtqD3IBbsDh%2F3Nj3sdHd4t1xWZJ27nZskK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;237&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;match constraint인 0dp로 설정해 주시면 구불구불한 선이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 가이드라인(Guideline) 사용하기&lt;/h2&gt;
&lt;p&gt;가이드라인은 여러 개의 뷰를 일정한 기준 선에 정렬할 때 사용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;480&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/up7dK/btqD55a7FPq/NbrHuFlxUJYAHGzpD7HBoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/up7dK/btqD55a7FPq/NbrHuFlxUJYAHGzpD7HBoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/up7dK/btqD55a7FPq/NbrHuFlxUJYAHGzpD7HBoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fup7dK%2FbtqD55a7FPq%2FNbrHuFlxUJYAHGzpD7HBoK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;480&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Add Horizontal Guideline을 추가하면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;486&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c15vIp/btqD3HChVNF/T2bqeCSnJKHswjLhZq7zNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c15vIp/btqD3HChVNF/T2bqeCSnJKHswjLhZq7zNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c15vIp/btqD3HChVNF/T2bqeCSnJKHswjLhZq7zNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc15vIp%2FbtqD3HChVNF%2FT2bqeCSnJKHswjLhZq7zNK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;486&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;가로로 점선이 생긴 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;505&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boKvNU/btqD4x0wIC7/2uyDarjQoB3ejUpDT1lUZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boKvNU/btqD4x0wIC7/2uyDarjQoB3ejUpDT1lUZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boKvNU/btqD4x0wIC7/2uyDarjQoB3ejUpDT1lUZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboKvNU%2FbtqD4x0wIC7%2F2uyDarjQoB3ejUpDT1lUZk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;505&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;가이드라인을 100dp만큼 움직이고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;530&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sqyB9/btqD4VtgHLv/vVMKsLYtL6lquW0uM834gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sqyB9/btqD4VtgHLv/vVMKsLYtL6lquW0uM834gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sqyB9/btqD4VtgHLv/vVMKsLYtL6lquW0uM834gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsqyB9%2FbtqD4VtgHLv%2FvVMKsLYtL6lquW0uM834gK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;530&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼의 연결점을 가이드라인에 맞추면 화면의 위에서 100만큼 떨어진 곳에서 화면의 중앙에 버튼이 위치하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;237&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BCcEl/btqD6RcocKh/D2zYX5RKRAeYjAF3vyGyV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BCcEl/btqD6RcocKh/D2zYX5RKRAeYjAF3vyGyV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BCcEl/btqD6RcocKh/D2zYX5RKRAeYjAF3vyGyV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBCcEl%2FbtqD6RcocKh%2FD2zYX5RKRAeYjAF3vyGyV0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;237&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 버튼을 3개로 추가하고 아래쪽 제약 조건을 없애면 위 사진과 같이 화면에서 100dp 만큼 떨어진 거리에서 버튼을 정렬할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. xml 코드 확인하기&lt;/h2&gt;
&lt;p&gt;보통은 디자이너 도구의 화면보다는 Text 탭을 눌러서 원본 XML 코드를 수정할 때가 많습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpPIjK/btqD2wBuIFQ/5qTPdU7gM3YQbjX6UkQzY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpPIjK/btqD2wBuIFQ/5qTPdU7gM3YQbjX6UkQzY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpPIjK/btqD2wBuIFQ/5qTPdU7gM3YQbjX6UkQzY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpPIjK%2FbtqD2wBuIFQ%2F5qTPdU7gM3YQbjX6UkQzY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1589216451928&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;androidx.constraintlayout.widget.Guideline
        android:id=&quot;@+id/guideline&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;
        app:layout_constraintGuide_begin=&quot;100dp&quot; /&amp;gt;
    
    &amp;lt;Button
        android:id=&quot;@+id/button1&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:onClick=&quot;onButton1Clicked&quot;
        android:text=&quot;Button&quot;
        app:layout_constraintEnd_toStartOf=&quot;@+id/button3&quot;
        app:layout_constraintStart_toEndOf=&quot;@+id/button2&quot;
        app:layout_constraintTop_toTopOf=&quot;@+id/guideline&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/button2&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Button&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;@+id/guideline&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/button3&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Button&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;@+id/guideline&quot; /&amp;gt;

&amp;lt;/androidx.constraintlayout.widget.ConstraintLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589216497228&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;가장 위쪽에 있는 코드는 XML 파일에 일반적으로 추가하는 정보입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589216588787&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;androidx.constraintlayout.widget.ConstraintLayout&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 태그는 화면 전체를 감싸고 있는 최상위 레이아웃 입니다. ConstraintLayout을 나타냅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 태그의 속성으로 xmls:로 시작하는 속성의 의미는 다음과 같습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;접두어&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;xmls:android&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;안드로이드 기본 SDK에 포함되어 있는 속성을 사용합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 60px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;xmls:app&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 60px;&quot;&gt;프로젝트에서 사용하는 외부 라이브러리에 포함되어 있는 속성을 사용합니다. app이라는 단어는 다른 것으로 바꿀 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 60px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;xmls:tools&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 60px;&quot;&gt;안드로이드 스튜디오의 디자이너 도구 등에서 화면에 보여줄 때 사용합니다. 이 속성은 앱이 실행될 때는 적용되지 않고 안드로이드 스튜디오에서만 적용됩니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;android:layout_width&lt;/b&gt;와 &lt;b&gt;android:layout_height&lt;/b&gt;는 안드로이드 기본 SDK에 포함되어 있는 layout_width와 layout_height의 속성을 사용한다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;android:id&lt;/b&gt; 속성은 뷰를 구분하는 구분자 역할을 합니다. 보통 xml 파일 안에서 뷰를 구분하거나, 이 뷰를 자바 소스 파일에서 찾을 때 사용합니다. &lt;b&gt;@+id/아이디 값&lt;/b&gt;의 형식으로 정의합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제약조건으로는 &lt;b&gt;layout_constraint[소스 뷰의 연결점]_[타깃 뷰의 연결점]=&quot;[타깃 뷰의 id]&quot;&lt;/b&gt;로 설정합니다.&lt;/p&gt;
&lt;p&gt;소스 뷰의 연결점으로는 contraintTop, &lt;span style=&quot;color: #333333;&quot;&gt;contraintBottom, &lt;span style=&quot;color: #333333;&quot;&gt;contraintLeft, &lt;span style=&quot;color: #333333;&quot;&gt;contraintRight가 있고&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;타깃 뷰의 연결점으로는 toTopOf, toBottomOf, toLeftOf, toRightOf가 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가이드라인의 &lt;b&gt;orientation&lt;/b&gt;의 속성은 필수 속성입니다. 가로 방향과 세로 방향 중 하나를 지정해야합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span&gt;app&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;:layout_constraintGuide_begin&lt;/b&gt; 속성은 부모 레이아웃 벽면에서 얼마나 떨어뜨려서 배치할지 정할 수 있는 속성입니다. begin 대신 end와 percent로도 사용할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>ConstraintLayout</category>
      <category>안드로이드 스튜디오</category>
      <category>제약 레이아웃</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/17</guid>
      <comments>https://rina214.tistory.com/17#entry17comment</comments>
      <pubDate>Tue, 12 May 2020 02:17:39 +0900</pubDate>
    </item>
    <item>
      <title>[DSC] 안드로이드 스튜디오와 친해지기</title>
      <link>https://rina214.tistory.com/16</link>
      <description>&lt;p&gt;DSC 2기 App Session 1주차&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 안드로이드 스튜디오 설치하기&lt;/h2&gt;
&lt;p&gt;안드로이드 스튜디오를 시작하기 위해 다음 포스트를 참고해주세요!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/11&quot;&gt;[Android] - 안드로이드 스튜디오 설치하기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589200026883&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;안드로이드 스튜디오 설치하기&quot; data-og-description=&quot;저는 우선 안드로이드 스튜디오를 설치하기 전에 사용자 계정 이름을 영어로 바꾸는 것을 추천드립니다. (C: 안의 사용자 (User)안에 사용자 이름이 있습니다. 확인해보시길 바랍니다.) 그래야 설치하기 쉬워요,,,..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/11&quot; data-og-url=&quot;https://rina214.tistory.com/11&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cvdzMy/hyF1AFqI4Y/yfzfKekXrRo4hgMj33zBP0/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/otQcM/hyF0hHvLYP/i25EjP7LKDUejiSSN6MQRk/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/bYCpIW/hyF0bUMwvL/AKNMAf4xenP88aK7iBD7s0/img.png?width=1920&amp;amp;height=902&amp;amp;face=0_0_1920_902&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/11&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cvdzMy/hyF1AFqI4Y/yfzfKekXrRo4hgMj33zBP0/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/otQcM/hyF0hHvLYP/i25EjP7LKDUejiSSN6MQRk/img.png?width=800&amp;amp;height=375&amp;amp;face=0_0_800_375,https://scrap.kakaocdn.net/dn/bYCpIW/hyF0bUMwvL/AKNMAf4xenP88aK7iBD7s0/img.png?width=1920&amp;amp;height=902&amp;amp;face=0_0_1920_902');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;안드로이드 스튜디오 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;저는 우선 안드로이드 스튜디오를 설치하기 전에 사용자 계정 이름을 영어로 바꾸는 것을 추천드립니다. (C: 안의 사용자 (User)안에 사용자 이름이 있습니다. 확인해보시길 바랍니다.) 그래야 설치하기 쉬워요,,,..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 안드로이드란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;구글&lt;/span&gt;&lt;span&gt;(Google)&lt;/span&gt;&lt;span&gt;에서 만든 &lt;/span&gt;&lt;span&gt;스마트폰용&lt;/span&gt;&lt;span&gt; 운영체제&lt;/span&gt;&lt;span&gt;(OS)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;휴대용 단말기를 위해 만들어졌을뿐만 아니라&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;다양한 앱을 만들어 설치하면 실행될 수 있도록 구성된 앱 플랫폼&lt;/span&gt;&lt;span&gt;(Platform)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;안드로이드의 장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;오픈 소스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 안드로이드는 오픈 소스이고 아파치 2.0 라이선스를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;자바 언어 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 많은 학생들이 배우는 기본 언어가 자바이기에 안드로이드 앱 개발자가 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;span style=&quot;color: #9d9d9d;&quot;&gt;현재 안드로이드 스튜디오에는 Java와 Kotlin 개발 언어가 있습니다. 우선은 기초를 다지기 위해 자바로 안드로이드 앱을 만들어보고 시간이 남으면 코틀린도 배워봅시다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;쉬운 앱 간 연동&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 다른 앱에서 제공하는 기능을 내가 만든 앱에서도 사용할 수 있습니다. 예를 들어, 사진 찍기 기능을 가진 앱을 만들기 위해 단말의 사진 앱을 연동하면 카메라 미리 보기 화면을 직접 만들지 않아도 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;bull; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;다양한 기능 지원&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; 안드로이드는 리눅스 기반이라 새로운 하드웨어의 기능을 쉽게 연동할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Project 시작하기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;590&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x9yv7/btqD2HvSxmS/ztQLZHWVhvPg2y1y6PsVrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x9yv7/btqD2HvSxmS/ztQLZHWVhvPg2y1y6PsVrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x9yv7/btqD2HvSxmS/ztQLZHWVhvPg2y1y6PsVrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx9yv7%2FbtqD2HvSxmS%2FztQLZHWVhvPg2y1y6PsVrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;590&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;안드로이드 스튜디오를 처음 실행하면 이러한 창이 뜹니다. (이전 프로젝트가 바로 뜬다면 Close Project를 하시면 이 창이 뜹니다.) 여기서 Start a new Android Studio Project를 누르시면 새 프로젝트를 생성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;558&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcjvYK/btqD4yrsAuk/WmpHq93c5W1MzIq3rxQQw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcjvYK/btqD4yrsAuk/WmpHq93c5W1MzIq3rxQQw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcjvYK/btqD4yrsAuk/WmpHq93c5W1MzIq3rxQQw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcjvYK%2FbtqD4yrsAuk%2FWmpHq93c5W1MzIq3rxQQw0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;558&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;그러면 템플릿을 선택하라고 뜰 겁니다.. 이 대화 상자는 앱 안에 만들어질 첫 화면의 모양을 선택하는 거예요.&lt;/span&gt;&lt;span&gt; Empty Activity&lt;/span&gt;&lt;span&gt;가 화면 안에 아무것도 없는 거라 일단 &lt;/span&gt;&lt;span&gt;Empty Activity&lt;/span&gt;&lt;span&gt;를 선택해줄게요&lt;/span&gt;&lt;span&gt;. Next를 눌러줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;577&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN8PJG/btqD2bKZdSf/fIIzLdZobl7GAkQIkSKur1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN8PJG/btqD2bKZdSf/fIIzLdZobl7GAkQIkSKur1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN8PJG/btqD2bKZdSf/fIIzLdZobl7GAkQIkSKur1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN8PJG%2FbtqD2bKZdSf%2FfIIzLdZobl7GAkQIkSKur1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;577&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;여기서는 &lt;span&gt;앱의 기본 정보를 입력하는 대화 상자가 나타납니다&lt;/span&gt;&lt;span&gt;. Name&lt;/span&gt;&lt;span&gt;에는 &lt;/span&gt;&lt;span&gt;Project &lt;/span&gt;&lt;span&gt;이름 W&lt;/span&gt;&lt;span&gt;eek1, Package name&lt;/span&gt;&lt;span&gt;에는 기본으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;사용하겠습니다&lt;/span&gt;&lt;span&gt;. 둘 다 &lt;/span&gt;&lt;span&gt;마음대로 입력해도 상관은 없지만 &lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;은 영어 대문자로 &lt;/span&gt;&lt;span&gt;Package name&lt;/span&gt;&lt;span&gt;은 영어 소문자로 시작해야 합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그 점만 유의해주세요&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;저희는 첫 기초를 배우기 위해 &lt;/span&gt;&lt;span&gt;Language&lt;/span&gt;&lt;span&gt;는 &lt;/span&gt;&lt;span&gt;Java&lt;/span&gt;&lt;span&gt;로 하겠습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;그리고 &lt;/span&gt;&lt;span&gt;Finish&lt;/span&gt;&lt;span&gt;를 눌러줍니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;프로젝트를 생성하는데 시간이 좀 걸릴 수도 있어요&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;프로젝트를 만들면 &lt;/span&gt;&lt;b&gt;&lt;span&gt;activity_main.xml&lt;/span&gt;&lt;/b&gt;&lt;span&gt;과 &lt;/span&gt;&lt;b&gt;&lt;span&gt;MainActivity.java &lt;/span&gt;&lt;/b&gt;&lt;span&gt;파일이 기본적으로 생성됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;895&quot; height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b53mrT/btqD4UHUjZP/fkN5xDzkPHKn31IHYiowMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b53mrT/btqD4UHUjZP/fkN5xDzkPHKn31IHYiowMk/img.png&quot; data-alt=&quot;MainActivity.java&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b53mrT/btqD4UHUjZP/fkN5xDzkPHKn31IHYiowMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb53mrT%2FbtqD4UHUjZP%2FfkN5xDzkPHKn31IHYiowMk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;895&quot; height=&quot;481&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MainActivity.java&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 화면이 MainActivity.java 파일이고&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFUsmo/btqD5JlLvR8/ruThAcb4VDdQgfy7G6o8kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFUsmo/btqD5JlLvR8/ruThAcb4VDdQgfy7G6o8kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFUsmo/btqD5JlLvR8/ruThAcb4VDdQgfy7G6o8kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFUsmo%2FbtqD5JlLvR8%2FruThAcb4VDdQgfy7G6o8kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;이 화면이 activity_main.xml 파일입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;activity_main.xml&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;우선 activity_main.xml 파일부터 살펴보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;activity_main.xml&lt;/span&gt;은 우리가 스마트폰에 보여줄 화면을 구성하는 파일입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;이 화면은 위젯들을 드래그 앤 드롭 형식으로 꾸밀 수 있고 오른쪽 상단의 버튼을 클릭하면 코드로도 구현할 수 있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;그리고 하얀색 화면은 스마트폰 화면에 나타날 &lt;b&gt;디자인 화면&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;(Design)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;이고 오른쪽 청록색&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;화면은 화면의 구성 요소만 보여주는 &lt;b&gt;청사진 화면&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;(Blue Print)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;입니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위의 파란색 버튼&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk74wt%2FbtqD3dVEkPG%2FGs4jAPystmMCMDDRR599b0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span&gt;을 클릭해서 &lt;/span&gt;&lt;span&gt;Design&lt;/span&gt;&lt;span&gt;을 고르시면 디자인 화면만 남을 거예요.. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;보통은 디자인 모드로 작업하고 겹치거나 가려진 요소가 없는지 확인할 때 청사진 모드로 전환하여 사용하는 경우가 많습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;MainActivity.java&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;MainActivity&lt;/span&gt;&lt;span&gt;.java &lt;/span&gt;&lt;span&gt;파일은 방금 &lt;span style=&quot;color: #333333;&quot;&gt;activity_main.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;xml&lt;/span&gt;&lt;span&gt;파일에서 만든 화면을 어떤 식으로 동작하게 할 것인지 정해줄 수 있는 파일입니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;317&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccP3Sb/btqD6mDGV5w/ih3wTNd46TSzhiCZLKF5Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccP3Sb/btqD6mDGV5w/ih3wTNd46TSzhiCZLKF5Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccP3Sb/btqD6mDGV5w/ih3wTNd46TSzhiCZLKF5Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccP3Sb%2FbtqD6mDGV5w%2Fih3wTNd46TSzhiCZLKF5Ck%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;317&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;두 파일의 위치는&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;MainActivity.java 파일은 app/java/com.example.week1 내부에 있고&lt;/p&gt;
&lt;p&gt;activity_main.xml 파일은 app/res/layout 내부에 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;앱 실행하기&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;일단 기본적으로 &lt;/span&gt;&lt;span&gt;Hello World!&lt;/span&gt;&lt;span&gt;가 출력되는 앱을 실행시켜봅시다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;안드로이드 폰이 없으신 분들은 에뮬레이터로 실행해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;https://rina214.tistory.com/12&quot;&gt;[Android] - 안드로이드 스튜디오 에뮬레이터로 실행하기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589206143146&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;안드로이드 스튜디오 에뮬레이터로 실행하기&quot; data-og-description=&quot;안드로이드 스튜디오에서 프로젝트를 만들게되면 activity_main.xml 파일과 MainActivity.java 파일이 기본적으로 생성되어있습니다. 일단 기본으로 놔두고 실행만 시켜보겠습니다. 오른쪽 상단에 초록색 재생버..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/12&quot; data-og-url=&quot;https://rina214.tistory.com/12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Swy9c/hyF1xPtPRa/z8bvm2H01dYgZNWF82v1J0/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/4WXe3/hyF1KgZjXC/21lIBd9svkK1nmV6IjXOy1/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/hfyr8/hyF1zmdA8B/49k5B11y2wAIZaRpu1M5K1/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Swy9c/hyF1xPtPRa/z8bvm2H01dYgZNWF82v1J0/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/4WXe3/hyF1KgZjXC/21lIBd9svkK1nmV6IjXOy1/img.png?width=800&amp;amp;height=429&amp;amp;face=0_0_800_429,https://scrap.kakaocdn.net/dn/hfyr8/hyF1zmdA8B/49k5B11y2wAIZaRpu1M5K1/img.png?width=1920&amp;amp;height=1030&amp;amp;face=0_0_1920_1030');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;안드로이드 스튜디오 에뮬레이터로 실행하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;안드로이드 스튜디오에서 프로젝트를 만들게되면 activity_main.xml 파일과 MainActivity.java 파일이 기본적으로 생성되어있습니다. 일단 기본으로 놔두고 실행만 시켜보겠습니다. 오른쪽 상단에 초록색 재생버..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;안드로이드 폰이 있으시다면 안드로이드 폰으로 실행시키는 게 편하실 거예요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;https://rina214.tistory.com/13&quot;&gt;[Android] - 안드로이드 스튜디오 안드로이드 폰 연결하기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589206138700&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;안드로이드 스튜디오 안드로이드 폰 연결하기&quot; data-og-description=&quot;안드로이드 스튜디오에서 스마트폰(안드로이드)와 연결을 하기 위해서는 스마트폰의 USB 디버깅 모드를 실행해야 합니다. 스마트폰의 설정에 들어가줍니다. 휴대전화 정보를 누릅니다. 소프트웨어 정보에 들어가..&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/13&quot; data-og-url=&quot;https://rina214.tistory.com/13&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b3ge1z/hyF0kdancO/zrbwBVUmCH1kMZ36lZr640/img.jpg?width=800&amp;amp;height=1422&amp;amp;face=0_0_800_1422,https://scrap.kakaocdn.net/dn/bbBKCA/hyF0pZQOeX/fZ2sxo2BWGrimfok3lceJ1/img.jpg?width=800&amp;amp;height=1422&amp;amp;face=0_0_800_1422,https://scrap.kakaocdn.net/dn/CImc3/hyF1DCagxd/4K6ie9KulqKE8TO9Fkawbk/img.jpg?width=1080&amp;amp;height=1920&amp;amp;face=0_0_1080_1920&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/13&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/13&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b3ge1z/hyF0kdancO/zrbwBVUmCH1kMZ36lZr640/img.jpg?width=800&amp;amp;height=1422&amp;amp;face=0_0_800_1422,https://scrap.kakaocdn.net/dn/bbBKCA/hyF0pZQOeX/fZ2sxo2BWGrimfok3lceJ1/img.jpg?width=800&amp;amp;height=1422&amp;amp;face=0_0_800_1422,https://scrap.kakaocdn.net/dn/CImc3/hyF1DCagxd/4K6ie9KulqKE8TO9Fkawbk/img.jpg?width=1080&amp;amp;height=1920&amp;amp;face=0_0_1080_1920');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;안드로이드 스튜디오 안드로이드 폰 연결하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;안드로이드 스튜디오에서 스마트폰(안드로이드)와 연결을 하기 위해서는 스마트폰의 USB 디버깅 모드를 실행해야 합니다. 스마트폰의 설정에 들어가줍니다. 휴대전화 정보를 누릅니다. 소프트웨어 정보에 들어가..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;앱을 실행하려면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zGrIx/btqD4x0tym4/jETMGwxsc2OcYLMYvHuvi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zGrIx/btqD4x0tym4/jETMGwxsc2OcYLMYvHuvi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zGrIx/btqD4x0tym4/jETMGwxsc2OcYLMYvHuvi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzGrIx%2FbtqD4x0tym4%2FjETMGwxsc2OcYLMYvHuvi1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 버튼을 눌러주시거나 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Shift + F10&lt;/b&gt;&lt;/span&gt;을 눌러주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;208&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dclPmg/btqD6lxYpYl/VO5GrKTrSboEK5fyIZ3RBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dclPmg/btqD6lxYpYl/VO5GrKTrSboEK5fyIZ3RBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dclPmg/btqD6lxYpYl/VO5GrKTrSboEK5fyIZ3RBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdclPmg%2FbtqD6lxYpYl%2FVO5GrKTrSboEK5fyIZ3RBk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;208&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 나온다면 나만의 앱을 만들 준비가 완료되신 겁니다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. MainActivity.java 이해하기&lt;/h2&gt;
&lt;pre id=&quot;code_1589206406275&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.week1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;프로그래밍을 해보신 분들은 알겠지만 원래 자바 파일이었다면 &lt;/span&gt;&lt;span&gt;main &lt;/span&gt;&lt;span&gt;함수가 있었을 겁니다. &lt;/span&gt;&lt;span&gt;하지만 여기서는 &lt;/span&gt;&lt;span&gt;main &lt;/span&gt;&lt;span&gt;함수가 없고 &lt;/span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;onCreate() &lt;/span&gt;&lt;span&gt;함수가 있습니다. onCreate()가 main() 역할을 한다고 생각할 수 있습니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그 안에 &lt;/span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;super&lt;/span&gt;&lt;span&gt;는 &lt;/span&gt;&lt;span&gt;onCreate() &lt;/span&gt;&lt;span&gt;함수를 호출합니다&lt;/span&gt;&lt;span&gt;. super&lt;/span&gt;&lt;span&gt;는 자바에서 상속받은 클래스에서 부모 클래스를 가리킬 때 사용하는 키워드입니다. &lt;/span&gt;&lt;span&gt;자바 모르시는 분들도 있으니 간단히 말하자면 &lt;b&gt;화면의 메시지를 보여주는 기능과는 상관이 없습니다&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span&gt;. &lt;/span&gt;&lt;/b&gt;&lt;span&gt;그래서 그냥 넘어가셔도 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;그리고 setContentView하고 &lt;/span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;R.layout.activity_main&lt;/span&gt;&lt;span&gt;이 있습니다&lt;/span&gt;&lt;span&gt;. setContentView() &lt;/span&gt;&lt;span&gt;함수는 화면에 무엇을 보여줄 것인지를 설정해주는 역할을 하고 &lt;/span&gt;&lt;span&gt;R.layout.activity_main&lt;/span&gt;&lt;span&gt;은 처음에 보았던 activity_main.xml의 화면이라는 것만 알면 됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;총 정리하자면 위의 코드는 activity_main.xml을 폰 화면에 보여주는 것이 전부입니다!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. activity_main.xml 이해하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; width=&quot;37&quot; height=&quot;33&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUVVRj/btqD2w2rc7L/ZIXpDSU7kZIPYKfmoKRZX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUVVRj/btqD2w2rc7L/ZIXpDSU7kZIPYKfmoKRZX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUVVRj/btqD2w2rc7L/ZIXpDSU7kZIPYKfmoKRZX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUVVRj%2FbtqD2w2rc7L%2FZIXpDSU7kZIPYKfmoKRZX0%2Fimg.png&quot; width=&quot;37&quot; height=&quot;33&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 버튼을 누른 (오른쪽 상단에 위치해 있습니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k49sY/btqD2dovzh8/Zbkln5wONk87zkreOuoo81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k49sY/btqD2dovzh8/Zbkln5wONk87zkreOuoo81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k49sY/btqD2dovzh8/Zbkln5wONk87zkreOuoo81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk49sY%2FbtqD2dovzh8%2FZbkln5wONk87zkreOuoo81%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 화면을 주로 사용하지만&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjqeGS/btqD54XxRze/ur6ixlMZYrmOT03xZd23DK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjqeGS/btqD54XxRze/ur6ixlMZYrmOT03xZd23DK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjqeGS/btqD54XxRze/ur6ixlMZYrmOT03xZd23DK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjqeGS%2FbtqD54XxRze%2Fur6ixlMZYrmOT03xZd23DK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지금은 우선 여기서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; width=&quot;36&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k74wt/btqD3dVEkPG/Gs4jAPystmMCMDDRR599b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk74wt%2FbtqD3dVEkPG%2FGs4jAPystmMCMDDRR599b0%2Fimg.png&quot; width=&quot;36&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 버튼을 눌러 &lt;b&gt;Design&lt;/b&gt;을 선택한 화면인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5G2PY/btqD4UOBGrp/Px1iMLaePvIQk0DshT1CK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5G2PY/btqD4UOBGrp/Px1iMLaePvIQk0DshT1CK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5G2PY/btqD4UOBGrp/Px1iMLaePvIQk0DshT1CK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5G2PY%2FbtqD4UOBGrp%2FPx1iMLaePvIQk0DshT1CK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 화면으로 진행할게요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l6Mle/btqD2u4CTB5/0rgAhNUiMmM2eCfjdQNck0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l6Mle/btqD2u4CTB5/0rgAhNUiMmM2eCfjdQNck0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l6Mle/btqD2u4CTB5/0rgAhNUiMmM2eCfjdQNck0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl6Mle%2FbtqD2u4CTB5%2F0rgAhNUiMmM2eCfjdQNck0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Attributes&lt;/b&gt;를 클릭하고 (화면의 우측에 위치해있어요)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T5DBT/btqD3IOEy27/xMaAUW0LbVXwnE1FpEaCdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T5DBT/btqD3IOEy27/xMaAUW0LbVXwnE1FpEaCdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T5DBT/btqD3IOEy27/xMaAUW0LbVXwnE1FpEaCdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT5DBT%2FbtqD3IOEy27%2FxMaAUW0LbVXwnE1FpEaCdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이 Hello World!를 클릭해주시면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cddrEq/btqD55hQlPv/zlhVxDir4C2ShVvzWGgSUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cddrEq/btqD55hQlPv/zlhVxDir4C2ShVvzWGgSUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cddrEq/btqD55hQlPv/zlhVxDir4C2ShVvzWGgSUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcddrEq%2FbtqD55hQlPv%2FzlhVxDir4C2ShVvzWGgSUk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이러한 화면을 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GwOAv/btqD6QqY5s1/IdaLk3mRzNtnS0TpDMLNL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GwOAv/btqD6QqY5s1/IdaLk3mRzNtnS0TpDMLNL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GwOAv/btqD6QqY5s1/IdaLk3mRzNtnS0TpDMLNL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGwOAv%2FbtqD6QqY5s1%2FIdaLk3mRzNtnS0TpDMLNL1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 &lt;b&gt;Attribute&lt;/b&gt;의 &lt;b&gt;text&lt;/b&gt;의 속성을 Hi, Android로 바꿔주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그리고 다시 실행시키면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKClUp/btqD6QEwbcN/Ps1L4WkkPU91wObYJbZOuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKClUp/btqD6QEwbcN/Ps1L4WkkPU91wObYJbZOuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKClUp/btqD6QEwbcN/Ps1L4WkkPU91wObYJbZOuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKClUp%2FbtqD6QEwbcN%2FPs1L4WkkPU91wObYJbZOuK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Hello World! 에서 Hi, Android로 바뀐 것을 확인할 수 있습니다!&lt;/p&gt;
&lt;h3&gt;1. Button 추가하기&lt;/h3&gt;
&lt;p&gt;이번엔 버튼을 추가해 볼까요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbjfx4/btqD6mRcxPC/SBYzKj1ZKyZb4OEBJ3MGKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbjfx4/btqD6mRcxPC/SBYzKj1ZKyZb4OEBJ3MGKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbjfx4/btqD6mRcxPC/SBYzKj1ZKyZb4OEBJ3MGKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbjfx4%2FbtqD6mRcxPC%2FSBYzKj1ZKyZb4OEBJ3MGKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 Hi, Android라고 적혀있는 TextView를 삭제해줍니다. (Hi, Android를 클릭하고 키보드의 &lt;b&gt;Delete&lt;/b&gt; 버튼을 누르면 삭제가 가능합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sDFaE/btqD2vCzA1n/kViL3jkHmPmSElsCpuF7bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sDFaE/btqD2vCzA1n/kViL3jkHmPmSElsCpuF7bK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sDFaE/btqD2vCzA1n/kViL3jkHmPmSElsCpuF7bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsDFaE%2FbtqD2vCzA1n%2FkViL3jkHmPmSElsCpuF7bK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 이 &lt;b&gt;자석 아이콘(Turn On Autoconnect)&lt;/b&gt;을 눌러주시면 요소를 쉽게 배치할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;좌측의 &lt;b&gt;팔레트(Palette)&lt;/b&gt;가 보이시나요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;247&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAdvwm/btqD3d2v6pA/qEKEGIiBUNaunNf1hGmGZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAdvwm/btqD3d2v6pA/qEKEGIiBUNaunNf1hGmGZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAdvwm/btqD3d2v6pA/qEKEGIiBUNaunNf1hGmGZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAdvwm%2FbtqD3d2v6pA%2FqEKEGIiBUNaunNf1hGmGZ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;247&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;팔레트에서는 화면에 추가할 요소(버튼, 메시지)들을 확인할 수 있습니다. 여기서 &lt;b&gt;Button&lt;/b&gt;를 화면으로 드래그해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BBUkW/btqD2H3TdBl/SIXinurNZYCkbtKsjO2Po0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BBUkW/btqD2H3TdBl/SIXinurNZYCkbtKsjO2Po0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BBUkW/btqD2H3TdBl/SIXinurNZYCkbtKsjO2Po0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBBUkW%2FbtqD2H3TdBl%2FSIXinurNZYCkbtKsjO2Po0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;모두 이렇게 되셨나요?&lt;/p&gt;
&lt;p&gt;이 상태로 앱을 실행시키면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDrWc/btqD53RRPHC/vEVxb1KlhIkhefWmAdo3RK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDrWc/btqD53RRPHC/vEVxb1KlhIkhefWmAdo3RK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDrWc/btqD53RRPHC/vEVxb1KlhIkhefWmAdo3RK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDrWc%2FbtqD53RRPHC%2FvEVxb1KlhIkhefWmAdo3RK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;296&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼이 만들어진 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Button Click Event&lt;/h3&gt;
&lt;p&gt;이번엔 버튼을 클릭했을 때 메시지를 나타나게 해 봅시다.&lt;/p&gt;
&lt;p&gt;이 개념이 이벤트를&amp;nbsp; 처리한다는 개념인데 &lt;span&gt;버튼을 누르는 행위는 안드로이드에서 클릭 이벤트라고 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t1aEO/btqD4Vz2atv/2TV9kGe1KAhW4mFLLa7eX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t1aEO/btqD4Vz2atv/2TV9kGe1KAhW4mFLLa7eX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t1aEO/btqD4Vz2atv/2TV9kGe1KAhW4mFLLa7eX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft1aEO%2FbtqD4Vz2atv%2F2TV9kGe1KAhW4mFLLa7eX1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Attribute&lt;/b&gt;의 &lt;b&gt;onClick&lt;/b&gt; 속성에 &lt;span style=&quot;color: #f89009;&quot;&gt;onButton1Clicked&lt;/span&gt;라고 입력해주세요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 MainActivity.java파일로 가겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 코드 작성을 편하게 하기 위해&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;279&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/codJ1e/btqD2wuCfLN/nchO7p7GfklLiPUyIMZGvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/codJ1e/btqD2wuCfLN/nchO7p7GfklLiPUyIMZGvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/codJ1e/btqD2wuCfLN/nchO7p7GfklLiPUyIMZGvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcodJ1e%2FbtqD2wuCfLN%2FnchO7p7GfklLiPUyIMZGvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;279&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;File&lt;/b&gt; -&amp;gt; &lt;b&gt;Settings&lt;/b&gt; 를 클릭해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;632&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n5s8D/btqD5IUJ535/aIjgCWg6S8UzcsD6hsat3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n5s8D/btqD5IUJ535/aIjgCWg6S8UzcsD6hsat3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n5s8D/btqD5IUJ535/aIjgCWg6S8UzcsD6hsat3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn5s8D%2FbtqD5IUJ535%2FaIjgCWg6S8UzcsD6hsat3K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;632&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 좌측의 &lt;b&gt;Editor&lt;/b&gt; -&amp;gt; &lt;b&gt;General&lt;/b&gt; -&amp;gt; &lt;b&gt;Auto Import&lt;/b&gt; 를 클릭해주세요.&lt;/p&gt;
&lt;p&gt;Java안의&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Add unambiguous imports on the fly&lt;/b&gt; 와&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Optimize imports on the fly (for current project)&amp;nbsp;&lt;/b&gt;항목을&lt;/p&gt;
&lt;p&gt;체크해주시면 import 구문이 자동으로 입력될 거예요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZoZlS/btqD2GKyl34/Q5kbF6fmAy2Eu9fGeHPCdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZoZlS/btqD2GKyl34/Q5kbF6fmAy2Eu9fGeHPCdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZoZlS/btqD2GKyl34/Q5kbF6fmAy2Eu9fGeHPCdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZoZlS%2FbtqD2GKyl34%2FQ5kbF6fmAy2Eu9fGeHPCdk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 사진과 같이 onCreate()함수 하단에&lt;/p&gt;
&lt;pre id=&quot;code_1589209838791&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void onButton1Clicked(View v) {
    Toast.makeText(this, &quot;버튼을 눌렀습니다.&quot;, Toast.LENGTH_LONG).show();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 입력해주시고 앱을 실행시키면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;256&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGHFz0/btqD3IHXiSM/LTJKPW5n5dBrtTAPDRyqq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGHFz0/btqD3IHXiSM/LTJKPW5n5dBrtTAPDRyqq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGHFz0/btqD3IHXiSM/LTJKPW5n5dBrtTAPDRyqq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGHFz0%2FbtqD3IHXiSM%2FLTJKPW5n5dBrtTAPDRyqq0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;256&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;버튼을 눌렀습니다.&lt;/b&gt; 라는 메시지가 잠깐 떴다가 사라 질 겁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것을 &lt;b&gt;Toast&lt;/b&gt; 메시지라고 합니다.&lt;/p&gt;
&lt;p&gt;위 코드의 의미를 해석하자면&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Toast.makeText(&lt;/span&gt; //Toast 메시지를 만들어라&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;this,&lt;/span&gt; //현재 Context에서&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&quot;버튼을 눌렀습니다.&quot;,&lt;/span&gt; //Toast에 나타낼 메시지&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Toast.LENGTH_LONG)&lt;/span&gt; //Toast 메시지가 나타나는 시간, Toast.LENGTH_SHORT하시면 더 짧게 나타났다가 사라져요&lt;/p&gt;
&lt;p&gt;.show(); //Toast를 보여줘라&lt;/p&gt;
&lt;p&gt;가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Button Click Event 2&lt;/h3&gt;
&lt;p&gt;이번엔 버튼을 2개 더 추가하고 기능을 2개 더 만들어봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jt06U/btqD2v3ynj8/8UX5U8XWjjnHRSfpucwwpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jt06U/btqD2v3ynj8/8UX5U8XWjjnHRSfpucwwpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jt06U/btqD2v3ynj8/8UX5U8XWjjnHRSfpucwwpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJt06U%2FbtqD2v3ynj8%2F8UX5U8XWjjnHRSfpucwwpK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;버튼을 추가하고 위 사진처럼 동그라미를 당겨서 버튼의 제약 조건을 걸어줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;안드로이드 스튜디오는 기본적으로 ConstraintLayout을 사용하는데 이 레이아웃은 각 요소마다 제약을 걸어줘야 하기 때문입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq0dqx/btqD2daX8BI/kU3DNGueWH03Z6eInSS8f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq0dqx/btqD2daX8BI/kU3DNGueWH03Z6eInSS8f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq0dqx/btqD2daX8BI/kU3DNGueWH03Z6eInSS8f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq0dqx%2FbtqD2daX8BI%2FkU3DNGueWH03Z6eInSS8f0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;세 버튼 다 제약을 걸어주시면 다음과 같은 화면이 될 겁니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;두 번째 버튼의 &lt;b&gt;onClick&lt;/b&gt; 속성에는 onButton2Clicked&lt;/p&gt;
&lt;p&gt;세 번째 버튼의 &lt;b&gt;onClick&lt;/b&gt; 속성에는 &lt;span style=&quot;color: #f89009;&quot;&gt;onButton3Clicked&lt;/span&gt;라고 입력해주겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 MainActivity.java에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RwVES/btqD5IAtwWa/cCwFqYtlWSpdFvkXTRnKs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RwVES/btqD5IAtwWa/cCwFqYtlWSpdFvkXTRnKs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RwVES/btqD5IAtwWa/cCwFqYtlWSpdFvkXTRnKs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRwVES%2FbtqD5IAtwWa%2FcCwFqYtlWSpdFvkXTRnKs1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1589210888156&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void onButton2Clicked(View v) {
    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(&quot;https://www.google.com&quot;));
    startActivity(myIntent);
}

public void onButton3Clicked(View v) {
    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(&quot;tel:010-1234-5678&quot;));
    startActivity(myIntent);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위의 코드를 입력해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 &lt;b&gt;Intent&lt;/b&gt;란 &lt;span&gt;내가 하고자 하는 행위를 의미합니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;span&gt;인텐트를 사용하면 애플리케이션 구성 요소 간에 데이터를 전달하거나 실행하려는 기능이 무엇인지 안드로이드 플랫폼에 알려줄 수 있는 것이지요.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 앱을 실행시켜 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;230&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6kuo/btqD5ImRNm5/VQSe7GjXx6JoYx384ATpI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6kuo/btqD5ImRNm5/VQSe7GjXx6JoYx384ATpI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6kuo/btqD5ImRNm5/VQSe7GjXx6JoYx384ATpI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6kuo%2FbtqD5ImRNm5%2FVQSe7GjXx6JoYx384ATpI0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;230&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;첫 번째 버튼을 클릭하면 전에 했던 것과 같이 Toast 메시지가 뜨고&lt;/p&gt;
&lt;p&gt;두 번째 버튼을 클릭하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;288&quot; height=&quot;NaN&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccqEhV/btqD3I2dc3p/dVERYgsD3fOgDrMELhn5mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccqEhV/btqD3I2dc3p/dVERYgsD3fOgDrMELhn5mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccqEhV/btqD3I2dc3p/dVERYgsD3fOgDrMELhn5mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccqEhV%2FbtqD3I2dc3p%2FdVERYgsD3fOgDrMELhn5mk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;288&quot; height=&quot;NaN&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;구글 홈페이지가&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;세 번째 버튼을 클릭하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEFUSi/btqD4xTGeUc/5cTKmrd6vhYztbZQEW9Vh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEFUSi/btqD4xTGeUc/5cTKmrd6vhYztbZQEW9Vh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEFUSi/btqD4xTGeUc/5cTKmrd6vhYztbZQEW9Vh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEFUSi%2FbtqD4xTGeUc%2F5cTKmrd6vhYztbZQEW9Vh0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;010-1234-5678에 전화걸 수 있는 화면이 나타납니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 코드를 분석해보자면&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Intent myIntent =&lt;/span&gt; //Intent 변수를 생성&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;new Intent(&lt;/span&gt; //새로운 Intent를 만듦&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Intent.ACTION_VIEW&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;,&lt;/span&gt; //화면에 보여주는 기능을 가진 Intent&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Uri.parse(&quot; &quot;))&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;;&lt;/span&gt; //Uri를 분석 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;&lt;/span&gt;https://www.google.com&lt;span style=&quot;color: #333333;&quot;&gt;&quot; 이면 사이트&lt;/span&gt; 접속&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;span&gt;&quot;tel:010-1234-5678&quot; 이면 전화 걸기&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;startActivity(myIntent)&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;;&lt;/span&gt; //방금 만든 Intent를 실행&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;a href=&quot;https://rina214.tistory.com/19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[Android] - [DSC] 안드로이드 스튜디오와 친해지기 2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589243763667&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[DSC] 안드로이드 스튜디오와 친해지기 2&quot; data-og-description=&quot;DSC 2기 App Session 1주차_2 [Android] - [DSC] 안드로이드 스튜디오와 친해지기 [DSC] 안드로이드 스튜디오와 친해지기 DSC 2기 App Session 1주차 1. 안드로이드 스튜디오 설치하기 안드로이드 스튜디오를 시��&quot; data-og-host=&quot;rina214.tistory.com&quot; data-og-source-url=&quot;https://rina214.tistory.com/19&quot; data-og-url=&quot;https://rina214.tistory.com/19&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ekvBqf/hyF1BkiKMh/JH6DsAE59wqAWSAwnH4co0/img.png?width=%!s(float64=396)&amp;amp;height=%!s(float64=444)&amp;amp;face=0_0_396_444,https://scrap.kakaocdn.net/dn/k9OLE/hyF1DblKIb/Vk8dJOqvK0Vq7x2J6p2YX1/img.png?width=%!s(float64=396)&amp;amp;height=%!s(float64=444)&amp;amp;face=0_0_396_444,https://scrap.kakaocdn.net/dn/bzKxIr/hyF1GFUUOJ/1d0aTvGb9LGRAE22p0YAV1/img.png?width=%!s(float64=1920)&amp;amp;height=%!s(float64=1029)&amp;amp;face=0_0_1920_1029&quot;&gt;&lt;a href=&quot;https://rina214.tistory.com/19&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://rina214.tistory.com/19&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ekvBqf/hyF1BkiKMh/JH6DsAE59wqAWSAwnH4co0/img.png?width=%!s(float64=396')&amp;amp;height=%!s(float64=444)&amp;amp;face=0_0_396_444,https://scrap.kakaocdn.net/dn/k9OLE/hyF1DblKIb/Vk8dJOqvK0Vq7x2J6p2YX1/img.png?width=%!s(float64=396)&amp;amp;height=%!s(float64=444)&amp;amp;face=0_0_396_444,https://scrap.kakaocdn.net/dn/bzKxIr/hyF1GFUUOJ/1d0aTvGb9LGRAE22p0YAV1/img.png?width=%!s(float64=1920)&amp;amp;height=%!s(float64=1029)&amp;amp;face=0_0_1920_1029);&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[DSC] 안드로이드 스튜디오와 친해지기 2&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;DSC 2기 App Session 1주차_2 [Android] - [DSC] 안드로이드 스튜디오와 친해지기 [DSC] 안드로이드 스튜디오와 친해지기 DSC 2기 App Session 1주차 1. 안드로이드 스튜디오 설치하기 안드로이드 스튜디오를 시��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;rina214.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;나머지는 다음 포스트에 이어집니다. :)&lt;/p&gt;</description>
      <category>Android</category>
      <category>1주차</category>
      <category>androidstudio</category>
      <category>App</category>
      <category>DSC</category>
      <category>안드로이드</category>
      <category>친구</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/16</guid>
      <comments>https://rina214.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 12 May 2020 00:39:36 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 스튜디오 글자 크기 변경하기</title>
      <link>https://rina214.tistory.com/15</link>
      <description>&lt;p&gt;혹시 화면에 보이는 소크 코드의 글자 크기를 바꾸고 싶으시다면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtkwKA/btqD3IVshoJ/uVl0aTzRT8aIJj1C7tVDDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtkwKA/btqD3IVshoJ/uVl0aTzRT8aIJj1C7tVDDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtkwKA/btqD3IVshoJ/uVl0aTzRT8aIJj1C7tVDDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtkwKA%2FbtqD3IVshoJ%2FuVl0aTzRT8aIJj1C7tVDDk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;File -&amp;gt; Settings를 클릭해주세요&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5YRv4/btqD3dOTKxl/11gyla0n4PNufg5zydKa2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5YRv4/btqD3dOTKxl/11gyla0n4PNufg5zydKa2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5YRv4/btqD3dOTKxl/11gyla0n4PNufg5zydKa2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5YRv4%2FbtqD3dOTKxl%2F11gyla0n4PNufg5zydKa2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 좌측의 Editor -&amp;gt; Font를 들어가주시면 이렇게 나타납니다.&lt;/p&gt;
&lt;p&gt;여기서 Size를 고치면 되는데 하단의 폰트 크기를 보시면서 원하는 크기만큼 조절해주세요!&lt;/p&gt;</description>
      <category>Android</category>
      <category>androidstudio</category>
      <category>font</category>
      <category>Size</category>
      <category>글자</category>
      <category>안드로이드 스튜디오</category>
      <category>크기</category>
      <author>RINAAA</author>
      <guid isPermaLink="true">https://rina214.tistory.com/15</guid>
      <comments>https://rina214.tistory.com/15#entry15comment</comments>
      <pubDate>Mon, 11 May 2020 23:40:25 +0900</pubDate>
    </item>
  </channel>
</rss>