티스토리 뷰

이번 글에서는 유튜브에 있는 내용을 따라서 아주 간단한 어플 하나 만들기를 해보려고 한다.

이 영상을 보게 된 계기가 지금 현재 보고있는 인강의 길이가 

하나에 40분인데 정리를 하고 그러다보면 2시간이 넘게 걸린다.

그래서 다른 짧은 영상이 무엇이 있나 찾아보다 발견했다.

 

새로운 프로젝트를 만들고 activity_main에 아래와 같이 코드를 작성을 해줬다.

<!-- MainActivity -->
<?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"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_message"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:hint="메시지를 입력하세요" /> <!-- string.xml에서 변수 선언 후 교체하기-->
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="보내기" <!-- string.xml에서 변수 선언 후 교체하기-->
        />
</LinearLayout>

activity_main에서 보이는 화면

코드를 보니 궁금한게 두가지가 있었다. 

 android:layout_width = "0dp"

 android:layout_weight= "1"

영상에선 이것에 대한 설명을 제대로 해주지 않았다. 

검색을 해보니 가중치(weight)는 주로 언제 사용을 하냐면 View 위젯들이 화면 가로 영역 전체를 차지하도록

만들 때 사용을 한다고 한다. weight의 값이 큰 위젯이 더 많은 비율로 가로 영역을 차지하게 됩니다.

레이아웃안에 모든 위젯들이 가로 영역을 같은 비율로 가져가고 싶다면 모두 1로 지정을 하면 됩니다.

그리고 주의해야 할 것으로는 width와 height의 값 둘 중 하나가 0dp로 설정이 되어있어야 한다는 것입니다.

무엇을 0dp로 설정할지는 orientation의 값에 의해 결정이 됩니다.

 

아래 사진과 위에 사진을 비교해보면 좋을 것 같습니다.

아래 사진은 가중치를 적용하지 않고 width와 height를 모두 wrap_content로 설정을 한 것이다.

비교를 해보니 차이점이 더 잘보일 거라고 생각한다. 

 

 

이 다음으로는 보내기 버튼에 onClick이벤트를 추가를 해서 보내기 activity를 만들어보겠습니다.

우선 Button 위젯에 아래 코드를 추가를 해주세요. 그러면 빨간 줄이 뜨게 될 것입니다.

<저는 있어서 안뜨는거에요..>

onClick의 값은 메소드 이름입니다.이 레이아웃과 연결된 MainActivity에 sendMessage라는 메소드가 있다면

연결이 된다는 것입니다.

빨간 줄이 뜬 코드에 형광등에서 Create~~ 이런 걸 선택을 하면 자동으로 만들어지게 됩니다.

위 코드의 메소드도 형광등을 클릭해서 만들어준 것입니다.

 

이제 이 sendMessage 안에 코드를 작성을 해보겠습니다.

Intent라는 것을 만들어줍니다. 이 Intent안에 매개변수로 뭐가 들어있는지 궁금하시다면

Ctrl + P 를 하시면 보이게 됩니다. 첫번째 Context 인자로는 Activity를 넣어줍니다.

그리고 그 다음 인자는 대상이 될 Activity입니다. 지금 프로젝트는 생성 후 별도의 Activity를 만들어주지 않아

main밖에 존재하지 않으므로 만들어 줘야 합니다.

Activity를 만들어준 후 코드를 마저 작성을 합니다.

    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        editText = (EditText)findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);.
        startActivity(intent);
    }

 

editText = (EditText)findViewById(R.id.edit_message);

LinearLayout안에 있는 위젯을 가져올 때 사용하는 방법입니다.
현재 EditText로 캐스팅을 해주지만 생략을 해도 이상은 없습니다.

 

String message = editText.getText().toString();

EditText 위젯에 입력되어 있는 Text 값을 가져올 때 이렇게 코드를 작성한다.

 

intent.putExtra(EXTRA_MESSAGE, message);


putExtra앞에 입력하는 것은 일종의 키입니다. 아무렇게나 String으로 작성하시면 되겠습니다.
내가 넘기는 값의 정보를 명확하게 알 수 있는 것으로 작성하면 좋습니다.
EXTRA_MESSAGE로 선언을 한 후 매개변수로 넣어준 것은 혹시 모를 오타를 대비해서 한 것이다.

 

startActivity(intent);

startActivity는 타겟이 되는 Activity를 실행을 한다! 라는 메소드입니다.

 

이렇게 작성한 sendMessage 메소드는 EditText에 입력된 text를 다음 Activity에 넘기는 코드가 됩니다.

넘겨줬으니 다음 Activity에서 받아주는 걸 작성을 해보겠습니다.

 

public class DisplayMessageActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);

        ViewGroup layout = findViewById(R.id.activity_display_message);
        layout.addView(textView);
    }
}

Intent intent = getIntent();

어떠한 intent를 받고 Activity가 실행이 되었는지 알고싶을 때 getIntent
Intent의 값이 null이 아니라면 다른 화면에서 이 화면을 띄운 것이다.
나중에는 혹시 모를 null값을 위해 조건을 걸어줘야 한다.

 

String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

putExtra로 보낸 데이터는 get"타입"Extra로 받습니다.
매개변수로는 putExtra에서 사용한 키값을 넣어주면 됩니다.

 

 

TextView 부터 addView는 코드로 layout에 위젯을 추가하는 것을 작성한 것입니다.

R.id.avtivity_display_message는 DisplayMessageActivity의 LinearLayout의 id값입니다.

이렇게 작성을 완료를 하면 main Activity에서 보내기를 눌렀을 때

DisplayActivity에서 받아서 내용을 출력해줍니다.

 

이상으로 진짜 진짜 간단한, 어플이라고 하기도 민망한 것을 만들어본 글이였습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함