유디의 공간정보·개발일기

5. 0713_ 로그인 layout 만들기, HashMap 사용하기 본문

JAVA + Android Studio

5. 0713_ 로그인 layout 만들기, HashMap 사용하기

55yudi 2021. 10. 24. 21:55

'확인' 버튼 --> binding.button

이미지  --> binding.output1

텍스트 --> binding.output2

 

- new Dog( ) --> 강아지 객체를 ArrayList dogs에 넣음

 

- wrap-content : 내용물 크기에 맞춰짐

- LinearLayout(vertical)로 convert

  * 속성창에서 orientation을 horizontal로 바꿀 수 있다.

 

- layout 안에 또 layout을 넣을 수 있음, 새로 추가 된 레이아웃은 남은 여유공간을 채운다.

 

- width : 가로 / 너비

  height : 세로 / 높이

 

- vertical : 수직 / 위아래로

  horizontal : 수평 / 좌우로

 

- layout을 여러 개 추가할 때 layout-weight에 1 값이 생기는데, 지우면 차곡차곡 붙일 수 있다.

 

- layout_gravity : 정렬

  가운데 정렬 : center_horizontal 의 true값에 체크

 

- layout_margin : 레이아웃 선을 위아래옆 공간과 띄움

  layout_marginTop : 위쪽과의 공간을 띄움

 

- padding : 내용물과의 공간을 띄움

 

- LinearLayout (horizontal) : 둘 다 wrap-content로, layout_gravity - center_horizontal true체크, layout_marginTop에 200dp

- LinearLayout (vertical) : 둘 다 wrap-content로

- input1/plainText : 180dp

- input2/plainText : wrap-content로, inputType - TextPassword 체크

- button : wrap-content/match-parent로

 


[MainActivity.java]

package com.example.test7;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import com.example.test7.databinding.ActivityMainBinding;

import java.util.ArrayList;
import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;
    //ArrayList<Dog> dogs = new ArrayList<Dog>();
    ArrayList<Animal> dogs = new ArrayList<Animal>(); //인터페이스 Animal을 Dog,Cat에 각각 implements해주기
    ArrayList<Animal> cats = new ArrayList<Animal>();

    HashMap<String, ArrayList> animals = new HashMap<String, ArrayList>();
    //위처럼 일일히 안만들고 하나로 합쳐 만들고 싶을 때
    //HashMap<이름, 값> <--- 쌍으로 값이 들어감


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        System.out.println("onCreate 함수 호출됨");

        //HashMap에 값 넣어주기
        animals.put("강아지", dogs);
        animals.put("고양이", cats);

        //로그인 버튼을 누를 때 동작 예약 + createDog()를 사용할거니깐 메인함수 밖에가서 함수만들고 오기
        binding.loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createDog();
            }
        });

        binding.createCatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createCat();
            }
        });
        //강아지찾기 버튼
        binding.findDogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Dog dog = (Dog) dogs.get(0); //(Dog) : arraylist<Animal>에 넣어놨던 것에서 Dog크기로 다시 불러옴

                //HashMap에 put으로 넣었던 값을 get으로 가져오기, ()안은 이름 key를 넣는다.
                ArrayList outDogs = animals.get("강아지");
                Dog dog = (Dog) outDogs.get(0);

                binding.output1.setText("첫번째 강아지 이름 : " + dog.name);
            }
        });
        //고양이찾기 버튼
        binding.findCatButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Cat cat = (Cat) cats.get(0);

                //HashMap에 put으로 넣었던 값을 get으로 가져오기
                ArrayList outCats = animals.get("고양이");
                Cat cat = (Cat) outCats.get(0);

                binding.output1.setText("첫번째 고양이 이름 : " + cat.name);
            }
        });

        }

    public void createCat() {
        String name = binding.input1.getText().toString();
        Cat cat = new Cat(name);
        cats.add(cat);

        binding.output1.setText("몇 마리? : " + cats.size());
    }

    public void createDog() { //새함수 만들때 메인 중괄호 밖에 쓰도록 중괄호 주의
        String name = binding.input1.getText().toString();
        Dog dog = new Dog(name);
        dogs.add(dog);

        System.out.println("강아지 : " + dogs.size());
        binding.output1.setText("몇 마리? : " + dogs.size());
    }
}

 

[Animal interface]

package com.example.test7;

public interface Animal {
}

 

[Dog class]

package com.example.test7;

public class Dog implements Animal {

    String name;

    Dog() {

    }

    Dog(String name) {
        this.name = name;
    }

    public void cry() {
        System.out.println("강아지가 울어요.");
    }
}

 

[Cat class]

package com.example.test7;

public class Cat implements Animal {

    String name;

    Cat() {

    }

    Cat(String name) {
        this.name = name;
    }

    public void cry() {
        System.out.println("고양이가 울어요.");
    }
}