[Android] STUDY 2 - My01_HelloWorld

PSEveloper ㅣ 2020. 11. 19. 02:03

 

 

1. 아이콘 지정하기

 

▲그림 저장 위치

 - 애플리케이션에 필요한 이미지 파일의 대부분은 res\drawable 폴더에 저장한다.

 

 

 - 저장할 때 v24를 선택하지 않도록 주의한다.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.my01_helloworld">

    <application
        android:allowBackup="true"
        android:icon="@drawable/apple"		
        android:label="@string/app_name"
        android:roundIcon="@drawable/apple"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Sub1Activity"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

▲ AndroidManifest.xml

 

위와 같이 icon과 roundIcon 속성을 이용해 어플리케이션 아이콘 이미지를 따로 지정할 수 있다.

 

 

▲변경한 아이콘

 

 


 

2. 명시적 인텐트 (Explicit Intent)

- 명시적 인텐트 파라미터로 실행할 다음 엑티비티의 클래스이름을 넘겨주어 새 엑티비티를 실행하는 인텐트를 말한다.

         
         Intent intent = new Intent(Context context, 
실행할 새 엑티비티.class)

         startActivity(intent);



3. 암시적 인텐트(Implicit Intent)

- 암시적 인텐트는 다른 기능을하는 앱을 호출할 수있는 기능을 구현하는 인텐트이다.

 


1) 사이트의 url을 다른 브라우저 앱으로 실행시킬 때

         
         Intent intent =
new Intent( Intent.ACTION_VIEW , Uri.parse(url주소) );
         
         startActivity(intent);



2) 전화를 걸지 않고 번호까지만 입력해줄 때

       
        Intent intent = new Intent( Intent.ACTION_DIAL , Uri.parse(“tel:”+“전화번호”) );
       
        startActivity(intent);



3) 전화번호를 입력하고 바로 걸어주게끔할 때

         
         Intent intent = new Intent( Intent.ACTION_CALL , Uri.parse(“tel:”+“
전화번호”) );
         
         startActivity(intent);

 

 

● activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="193dp"
        android:layout_height="46dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:gravity="center"
        android:text="안녕하세요 한울!!!"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="72dp"
        android:onClick="btn1Clicked"
        android:text="클릭하기"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/textView" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:onClick="btn2Clicked"
        android:text="네이버 보기"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnClick" />

    <Button
        android:id="@+id/btnCall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:text="전화걸기"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button2" />

    <EditText
        android:id="@+id/etPhone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:ems="10"
        android:hint="전화번호"
        android:inputType="number|textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnCall" />

    <Button
        android:id="@+id/btnNewActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="새창띄우기"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/etPhone" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

● activity_sub1.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#AAC1A0"
    tools:context=".Sub1Activity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="28dp"
        android:background="#9EFFD2"
        android:text="서브1 액티비티 화면입니다!"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnRtnMain"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="메인으로 돌아가기"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

● MainActivity.java

package com.example.my01_helloworld;

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

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    EditText etPhone;
    Button btnCall, btnNewActivity;

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

        etPhone = findViewById(R.id.etPhone);
        btnCall = findViewById(R.id.btnCall);
        btnNewActivity = findViewById(R.id.btnNewActivity);

        btnCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String phoneNum = "tel:" + etPhone.getText().toString();
                // → etPhone.getText() : object 형식
                Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(phoneNum));
                // Intent.ACTION_DIAL : 안드로이드의 암시적 Intent(전화걸기 기능 구현)
                //Uri.parse() : 전화번호, 페이지 url, 이메일주소 등등
                //              URL을 Uri Object로 변환해주기 위해 사용하는 메소드
                startActivity(intent);

            }//onClick
        });//btnCall.setOnClickListener

        btnNewActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), Sub1Activity.class);
                startActivity(intent);
                // → 명시적 Intent
            }//onClick
        });//btnNewActivity.setOnClickListener

    }//onCreate

    // 이렇게 함수를 만들어 xml의 design탭의 onclicked 속성에 함수를 연결하여
    // 함수를 실행시키게 하는 방법도 있다.
    public void btn1Clicked(View view) {
        //팝업 메세지 띄우기 : Toast
        // context: this / getApplicationContext() / MainActivity.this
        // Context → 내가 가지고 있는 환경 설정 문서
        Toast.makeText(this, "버튼1이 클릭됨!", Toast.LENGTH_LONG).show();
    }//btn1Clicked()

    public void btn2Clicked(View view) {
        // url로 연결하여 새창 띄우기 : Intent
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"));
        startActivity(intent);
    }//btn2Clicked()

}//class

 

 

● Sub1Activity.java

package com.example.my01_helloworld;

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

import androidx.appcompat.app.AppCompatActivity;

public class Sub1Activity extends AppCompatActivity {
    Button btnRtnMain;

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

        btnRtnMain = findViewById(R.id.btnRtnMain);
        btnRtnMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();       //화면 사라지게 하기

            }//onClick
        });//btnRtnMain.setOnClickListener
    }//onCreate
}//class

 

결과

▲버튼 - 알람창 작동 화면 / 네이버 연결 버튼 작동 화면

 

 

▲전화 연결 버튼 작동 화면 / 전화번호 입력칸 작동 화면

 

▲새 화면 띄우기 버튼 작동 화면