티스토리 뷰
이번 글에서는 유튜브에 있는 내용을 따라서 아주 간단한 어플 하나 만들기를 해보려고 한다.
이 영상을 보게 된 계기가 지금 현재 보고있는 인강의 길이가
하나에 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>
코드를 보니 궁금한게 두가지가 있었다.
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에서 받아서 내용을 출력해줍니다.
이상으로 진짜 진짜 간단한, 어플이라고 하기도 민망한 것을 만들어본 글이였습니다.
'Android Studio > 실습위주' 카테고리의 다른 글
안드로이드 스튜디오 - 데이터 저장하기(SharedPreferences)(2) (0) | 2019.11.20 |
---|---|
안드로이드 스튜디오 - 데이터 저장하기(SharedPreferences)(1) (0) | 2019.11.19 |
- Total
- Today
- Yesterday
- 관계형데이터베이스
- HTML
- PHP&MySQL
- 변수
- 객체
- 생활코딩#MySQL
- inline
- 생활코딩#동영상을#글로#html
- visual studio code
- 생활코딩
- 알고리즘
- 정렬
- javascript
- C언어
- 선택자
- 문자열
- 동영상을
- 조건문
- 언리얼엔진
- 글로
- GRID
- php
- 언리얼엔진4
- 네트워크 프로그래밍
- css
- 기초
- TAG
- 안드로이드 스튜디오
- Link
- 차이점
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |