모바일 프로그래밍 공부
모바일 프로그래밍 1주차
NaZZU
2025. 3. 17. 19:20
프로젝트 생성
- 애플리케이션 이름
- Project명 ( 공백 없이 입력 )
- 응용 프로그램 명
- 회사 도메인
- user.companyname.com
- 패키지 이름
- 2단계 이상 입력
- com.companyname.appname
- 폴더 생성 구조 : com\companyname\appname
- Activity 생성
- 클래스명 ( 공백 없이 입력 )
안드로이드 앱 개발 프로세스
안드로이드 프로젝트 구조
- 안드로이드 프로젝트 파일
File | Function |
.gradle | Build 환경 설정 |
.idea | Copyright, Scope 등 설정 |
app | App관련 source, resource 파일 컴파일 후 생성되는 class 파일 |
gradle | Gradle wrapper는 적절한 Gradle binary를 자동으로 다운로드 해주는 기능 |
.gitignore | Git 에서 Project 별 ignore할 필요가 있는 파일 및 폴더 설정 |
build.gradle | module의 build 방법이 정의 된 script build에 사용할 SDK 버전, 애플리케이션 버전, 라이브러리 등 설정 |
gradle.properties | Gradle 속성 저장 |
gradlew | Gradle wrapper를 통해 빌드를 진행하기 위한 script |
gradlew.bat | Gradle wrapper를 통해 빌드를 징행하기 위한 script |
local.properties | Android SDK 폴더 지정 |
settings.gradle | Gradle 설정 |
- 안드로이드 app 폴더
Folder | Function | |||
app | build | generated | assets | 외부데이터 (DB, raw data) 저장 |
res | Resource 파일 | |||
source | R file | |||
intermediates | apk | *.apk 파일/ *.json 파일 | ||
assets | 외부 데이터 ( DB, raw data ) 저장 | |||
dex | dex file | |||
javac | Classes 파일 | |||
manifest | 애플리케이션을 구성하는 기본요소인 Activity, Sercice, Content Provider, Intents, Broadcast Reciver, Notifications를 정의하고 그 메타데이터들을 제공하는 XM: 문서 파일 | |||
outputs | logs | log file | ||
lib | ||||
src | main | java | Mainactivity.java 파일 저장 | |
res | Resource 파일 저장 |
textView의 문자열을 "Welcome to my android world!"로 변경하기
source code)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Welcome to my Android World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
result )
Java 코드로 TextView의 속성을 변경하기
source code)
package com.inhatc.mobile_programming_practice;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
TextView objTV = findViewById(R.id.textView);
objTV.setText("Android Programming!");
objTV.setTextColor(Color.BLUE);
objTV.setGravity(Gravity.CENTER);
objTV.setTextSize(32);
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;
});
}
}
result )
Edit Text 속성을 사용하기
source code)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:text="Google : "
android:editable="true"
android:layout_marginTop="146dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
OR
package com.inhatc.mobile_programming_practice;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
TextView objET = findViewById(R.id.editText);
objET.setText("Google : ");
objET.setGravity(0x01);
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;
});
}
}
result )
source code)
package com.inhatc.mobile_programming_practice;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
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 {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
TextView objET = findViewById(R.id.editText);
objET.setText("Google : ");
objET.setGravity(0x01);
String str = objET.getText().toString();
objET.setText(str + "Android Programming");
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;
});
}
}
result )