본문 바로가기
안드로이드 스튜디오

[안드로이드 스튜디오] 앱만들기 #2. EditText, Button + 타이틀바 생성

by sojung118 2024. 8. 26.

[ 실행화면 ]

 


 

#1에서 간단한 textView를 xml에 쓴 후 AVD에 띄워보는것까지 했고,

#2에서는 EditText, Button을 하나씩 만들고

MainActivity.java 파일을 조금 건드려 버튼을 클릭하면 EditText에 설정한 text가 들어가도록 했다.

 

 

1. 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/et_id"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:hint="아이디를 입력하세요..."/>
    
    <Button
        android:id="@+id/btn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼 텍스트"/>

</LinearLayout>

 

앞선 강의와 다르게 이번 EditText와 Button에는 id를 부여해주었다.

MainActivity.java 파일에서 이 id를 가져와서 쓰기 위함이다.

width나 height 속성은 대체로 단위를 dp로 주는듯...


 

2. MainActivity.java

package com.example.android_test;

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

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    EditText et_id;
    Button btn_test;

    @Override

    //onCreate -> 어플을 처음 실행했을때 실행됨

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

//        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
//            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
//            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
//            return insets;
//        });

        et_id = findViewById(R.id.et_id); //et_id 아이디를 가진것과 연결된것
        btn_test = findViewById(R.id.btn_test);

        //btn_test 아이디를 가진 버튼을 클릭했을때 액션을 취하도록 만들어주기
        btn_test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //setText = 무슨 값을 써주고 싶을때..
                et_id.setText("버튼을 클릭했습니다.");
                //즉 버튼을 클릭했을때 et_id id를 가진 EditText에 setText해주기
            }
        });

    }
}


//구문이 끝날때는 세미콜론을 써서 닫아주기
//EditText뒤, Button뒤는 보통 변수이름이 들어가는데 잊어버리지 않도록 xml에서 선언해준 id로..
//EditText나 Button 이 빨갛게 뜬다 -> import가 되지 않았기 때문
//해당 글자 위에 커서를 올리고 alt+enter를 하면 자동으로 import함

 

onCreate에서 주석 처리한 부분은 강의에서 기본으로 세팅되어 있는 부분과

나의 컴퓨터에서 기본으로 세팅되어 있는 부분이 달라서, 주석처리했다.

 

여기서 얻어갈 것은 다음과 같다.

  • findViewById(R.id.아이디이름)
  • 변수이름.setText(텍스트에 넣고 싶은 내용)
  • 변수 선언 부분에서 오류가 날 시 글자 위 커서 올린 후 alt+Enter -> import 시켜줌

* 더 자세한 부분은 강의를 들으면서 주석 처리했기 때문에 위 코드 주석 처리 부분 확인

 

이후 AVD를 실행시키면 대표 이미지처럼 AVD가 실행된다.

버튼을 클릭하면 EditText에 setText되도록 java 코드를 수정시켰으므로 변경되는지 확인하기!

 


 

+.. 이전 포스팅에서도 얘기했듯이 새로 설치한 버전에서 타이틀바가 보이지 않았다.

타이틀바를 만들어도 레이아웃이랑 타이틀바가 겹쳐서 내용이 제대로 안보이는 현상까지..

근데 이전 포스팅 해결법처럼 하지 않고 더 간단하게 해결할 수 있었다!

 

 

나의 경우 위 사진처럼 themes.xml이 2개 있는데, 일반 모드일때와 다크 모드 2가지 경우의 xml이다.

따라서 두 파일에서 모두 수정을 거쳐줘야하는데,

 

<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="Base.Theme.Android_test" parent="Theme.Material3.DayNight.NoActionBar">
    </style>

    <style name="Theme.Android_test" parent="Base.Theme.Android_test" />
</resources>

 

이게 기본 코드였다면 여기에서

 

<style name="Base.Theme.Android_test" parent="Theme.Material3.DayNight"> 로

DayNight 뒤에 있는 NoActionBar 부분을 삭제시켜주면 된다!!

 

괜히 다른것들 건드리고 추가시켰다가 레이아웃 겹침 현상이 생겼다가 없어졌다가...ㅎㅎ..

 

지금 참고로 하고 있는 강의는 다음과 같습니다.

 

http:// youtube.com/watch?v=mlxhD7M8Nsg&list=PLC51MBz7PMyyyR2l4gGBMFMMUfYmBkZxm&index=3