[ Do it! ] #8. 도전! - 세 개 이상의 화면 만들어 전환하기

ma.caron_g·2022년 2월 25일
0

Do it! - Android Studio

목록 보기
16/18
post-thumbnail

[ 📄 문 제 ]

앱에서 사용될 수 있는 여러 화면을 구성하고 각 화면을 전환하면서 토스트메시지를 띄워주도록 만들어 보세요.



[ 📚 설 명 ]

  1. 로그인 화면과 메뉴 화면 그리고 세 개의 서브 화면(고객 관리 화면, 매출 관리 화면, 상품 관리 화면)을 각각 액티비티로 만듭니다.
  2. 로그인 화면에는 두 개의 입력상자와 하나의 버튼이 들어가도록 합니다.
  3. 메뉴 화면에는 세 개의 버튼이 들어가도록 하고 각각 '고객 관리', '매출 관리', '상품 관리' 라는 이름으로 표시합니다.
  4. 로그인 화면의 [로그인] 버튼을 누르면 메뉴 화면으로 이동합니다. 만약 사용자 이름이나 비밀번호가 입력되어 있지 않은 상태에서 [로그인] 버튼을 누르면 토스트로 입력하라는 메시지를 보여주고 대기합니다.
  5. 메뉴 화면의 버튼 중에서 하나를 누르면 해당 서브 화면으로 이동합니다. 메뉴 화면에 있는 [로그인] 버튼을 누르면 로그인 화면으로 이동하고 각 서브 화면에 있는 [메뉴] 버튼을 누르면 메뉴 화면으로 이동합니다.

[ 💻 코 드 ]

[ edittext_draw.xml ]

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:width="150sp" android:height="30dp">
        <shape>
            <solid android:color="#ffffff"/>
            <stroke
                android:width="1.5dp"
                android:color="#aa33bbbb"/>
        </shape>
    </item>
</layer-list>

[ values/colors.xml ]

<?xml version="1.0" encoding="utf-8"?>
<resources>
	//코드 추가
    <color name="mainColor">#AA33BBBB</color>
    <color name="mainTintColor">#FF44CCCC</color>
</resources>

[ activity_main.xml ]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:background="#ffffff"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/titleLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/mainColor">
        <TextView
            android:id="@+id/LoginTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:text="로그인하기"
            android:textSize="25sp"
            android:textColor="#ffffff"
            android:textStyle="bold"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:layout_marginTop="100dp">
        <LinearLayout
            android:id="@+id/txtLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">
            <EditText
                android:id="@+id/edtId"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:textSize="12sp"
                android:hint="ID"
                android:inputType="text"
                android:singleLine="true"
                android:maxLength="12"
                android:background="@drawable/edittext_draw"/>
            <EditText
                android:id="@+id/edtPwd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:paddingLeft="10dp"
                android:paddingRight="10dp"
                android:textSize="12sp"
                android:hint="Password"
                android:inputType="textPassword"
                android:singleLine="true"
                android:maxLength="16"
                android:background="@drawable/edittext_draw"/>
        </LinearLayout>
        <Button
            android:id="@+id/btnLogin"
            android:layout_width="100dp"
            android:layout_height="70dp"
            android:layout_marginTop="4dp"
            android:layout_marginLeft="20dp"
            android:backgroundTint="@color/mainTintColor"
            android:background="#aa33bbbb"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:text="로그인"
            android:textSize="18sp"/>
    </LinearLayout>

</LinearLayout>

[ activity_menu.xml ]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/titleLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/mainColor">
        <TextView
            android:id="@+id/menuTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:text="메인 메뉴"
            android:textSize="25sp"
            android:textColor="#ffffff"
            android:textStyle="bold"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="250dp"
        android:gravity="center">
        <Button
            android:id="@+id/btnCustomCare"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:background="@color/mainColor"
            android:layout_margin="20dp"
            android:text="고객 관리"
            android:textSize="20sp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:backgroundTint="@color/mainTintColor"/>
        <Button
            android:id="@+id/btnSalesCare"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:background="@color/mainColor"
            android:layout_margin="20dp"
            android:text="매출 관리"
            android:textSize="20sp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:backgroundTint="@color/mainTintColor"/>
        <Button
            android:id="@+id/btnProductCare"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:background="@color/mainColor"
            android:layout_margin="20dp"
            android:text="상품 관리"
            android:textSize="20sp"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:backgroundTint="@color/mainTintColor"/>
    </LinearLayout>
</LinearLayout>
<br>


## [ activity_custom.xml ]
>
```java
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">
>
    <LinearLayout
        android:id="@+id/titleLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/mainColor">
        <TextView
            android:id="@+id/subTitle1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:text="고객 관리"
            android:textSize="25sp"
            android:textStyle="bold"
            android:textColor="#ffffff"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="400dp"
        android:orientation="vertical"
        android:gravity="center">
        <Button
            android:id="@+id/btnCustomMenu"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="메뉴로"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:textSize="18sp"
            android:background="@color/mainColor"
            android:backgroundTint="@color/mainTintColor"/>
        <Button
            android:id="@+id/btnCustomLogin"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="로그인으로"
            android:textColor="#ffffff"
            android:textStyle="bold"
            android:textSize="18sp"
            android:background="@color/mainColor"
            android:backgroundTint="@color/mainTintColor"/>
    </LinearLayout>
</LinearLayout>


[ MainActivity.java ]

package com.study.doit;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.graphics.Color;
import android.nfc.Tag;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    public static final int MENU_CODE_LOGIN = 10001;

    EditText edtId, edtPwd;

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

        edtId = findViewById(R.id.edtId);
        edtPwd = findViewById(R.id.edtPwd);
        Button btnLogin = findViewById(R.id.btnLogin);

        Intent intent = getIntent();
        String prev = null;

        try {
            prev = intent.getExtras().getString("from");
            Toast.makeText(getApplicationContext(), prev + " -> Main", Toast.LENGTH_SHORT).show();
        }
        catch(Exception e){

        }
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edtId.getText().toString().replace(" ", "").equals("") || edtPwd.getText().toString().replace(" ", "").equals("") ) {
                    Toast.makeText(getApplicationContext(), "회원 정보를 확인해주세요.", Toast.LENGTH_SHORT).show();
                }
                else {
                    moveActivity();
                }
            }
        });
    }

    ActivityResultLauncher startActivityResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {

        }
    });

    public void moveActivity(){
        Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
        intent.putExtra("from", "Main");
        startActivityResult.launch(intent);
        finish();
    }
}

package com.study.doit;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MenuActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MenuActivity";
    public static final int MENU_CODE_CUSTOM = 1000127;
    public static final int MENU_CODE_SALES = 1000373;
    public static final int MENU_CODE_PRODUCT = 1000117;

    Button btnCustomCare, btnProductCare, btnSalesCare;

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

        btnCustomCare = findViewById(R.id.btnCustomCare);
        btnProductCare = findViewById(R.id.btnProductCare);
        btnSalesCare = findViewById(R.id.btnSalesCare);

        btnCustomCare.setOnClickListener(this);
        btnProductCare.setOnClickListener(this);
        btnSalesCare.setOnClickListener(this);

        Intent intent = getIntent();
        String prev = intent.getExtras().getString("from");

        Toast.makeText(getApplicationContext(), prev + " -> Menu", Toast.LENGTH_SHORT).show();
    }

    ActivityResultLauncher moveActivity = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {

        }
    });

    @Override
    public void onClick(View view) {
        Intent intent;
        switch(view.getId()){
            case R.id.btnCustomCare:
                intent = new Intent(this, CustomActivity.class);
                intent.putExtra("from", "Menu");
                moveActivity.launch(intent);
                finish();
                break;
            case R.id.btnProductCare:
                intent = new Intent(this, ProductActivity.class);
                intent.putExtra("from", "Menu");
                moveActivity.launch(intent);
                finish();
                break;
            case R.id.btnSalesCare:
                intent = new Intent(this, SalesActivity.class);
                intent.putExtra("from", "Menu");
                moveActivity.launch(intent);
                finish();
                break;
        }
    }
}

[ CustomActivity.java ]

package com.study.doit;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

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

public class CustomActivity extends AppCompatActivity implements View.OnClickListener{

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

        findViewById(R.id.btnCustomMenu).setOnClickListener(this);
        findViewById(R.id.btnCustomLogin).setOnClickListener(this);

        Intent intent = getIntent();
        String prev = intent.getExtras().getString("from");

        Toast.makeText(getApplicationContext(), prev + " -> Custom", Toast.LENGTH_SHORT).show();
    }

    ActivityResultLauncher MoveAtCustom = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {

        }
    });
    @Override
    public void onClick(View view) {
        Intent intent;
        switch(view.getId()) {
            case R.id.btnCustomMenu:
                intent = new Intent(this, MenuActivity.class);
                intent.putExtra("from", "Custom");
                MoveAtCustom.launch(intent);
                finish();
                break;
            case R.id.btnCustomLogin:
                intent = new Intent(this, MainActivity.class);
                intent.putExtra("from", "Custom");
                MoveAtCustom.launch(intent);
                finish();
                break;
        }
    }
}

그 외 다른 서브페이지 2개도 activity_custom.xmlCustomActivity.java와 같이 만들어주면 됩니다.



[ 🖋 디자인 ]

토스트 메시지를 이용하여 어디에서 어디로 이동했는지 표시했으며

사진 차례대로

  1. 실행
  2. 정보 미입력시 토스트
  3. 메인(로그인)에서 메뉴로 이동
  4. 메뉴에서 상품으로 이동
  5. 상품에서 메인으로 이동
  6. 메인(로그인)에서 메뉴를 거쳐 매출로 이동
  7. 매출에서 메뉴로 이동

으로 전 과정에서 언급한 '고객 관리' 액티비티를 제외한 모든 액티비티를 하나씩 거치는 과정을 인증했습니다.

[ 💡 학습한 내용 ]

  • 인텐트를 넘길 시 putExtra()라는 메서드를 이용하여 딕셔너리(키 : 값) 으로 넘겨줌을 알았고
    받는 액티비티에서 인텐트 객체를 선언하여 getIntent();를 하여 받은 인텐트 값을받을 수 있음을 학습하였습니다.
// String값일 시
String s = getExtras().getString("Key값");
  • 버튼 하나 하나에 이벤트를 구현할 필요 없이 하나의 메서드에서 버튼 View에getId()로 id 값을 받아 id 값에 따른 이벤트 구현을 만들 수 있음을 학습하였습니다.
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글