-
TECHIT 앱 스쿨 2기: Android 51 ~ 52일차 (23.07.11 ~ 12)[THEC!T] 앱 스쿨2기 : Android 2023. 7. 12. 23:27728x90
자료 출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 내용
어제와 오늘은 강사님께서 지난주에 내주신 문제에 대하여 설명과 함께 같이 작성해보며, 개념등을 다시 한번 설명해주시면서 진행되었습니다.
제가 작성한 코드와 강사님께서 작성한 코드의 차이점으로는 확실히 사용자의 입장에서 좀 더 편하고 알기 쉽도록 기능 구현을 많이 하셨고, 코드작성 방법등이 차이가 많이 났습니다.
저의 경우에는 기능과 화면을 동시에 만들면서 진행을 하였지만, 강사님의 경우에는 화면들을 먼저 모두 만들고 기능들을 점점 채워가는 방식으로 작성을 하셨고, 그로 인해 화면을 준비하면서 자주 사용하는 기능들에 대해서는 거의 대부분 메서드로 작성하여 코드를 완성시키셨습니다.
그로 인하여 결정적인 차이점으로 저의 경우 코드의 재사용성율이 강사님이 작성하신 코드의 재사용율성과 비교한다면 낮다는 점이 가장 큰 차이점이라고 생각하게 되었습니다. 그 다음으로는 SQLite를 사용하면서 기본키에 대한 설정과 DAO 클래스 내부 설계에 대한 방식이 두 번째라고 생각합니다.
저의 경우 일부 필요하다면 추가를 하여 작성하였지만, 강사님의 경우에는 기본기능들을 수정하지 않고, 추가하여 작성하는 방법을 사용하셨습니다.
그리고 해당 문제를 설명해주시면서,애플리케이션의 로고, 테마 설정, 스플래시 화면과, 프래그먼트 번들, 애니메이션 설정등에 대해서 설명해주셨습니다.
처음으로는 애플리케이션의 로고 등의 파일들을 간단히 만드는 방법들을 알려주셨습니다.
해당 사이트에 들어가서 이미지 파일을 선택하여 올리면 안드로이드 스튜디오에 알맞게 파일을 생성하여 줍니다.
해당 이미지들은 res - mipmap 폴더 내 용도에 맞게 배치하여 사용 및 설정 할 수 있습니다.
AndroidManifest.xml 파일에서 하기와 같이 설정하여 사용이 가능합니다.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="메모앱" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Android74_MemoApp" tools:targetApi="31"> <activity android:name=".MainActivity" android:exported="true" android:theme="@style/AppTheme.Splash"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
그리고 테마의 색상을 정하는 방법은 하기와 같이
themes.xml 파일 내
<item name="android:statusBarColor">@android:color/white</item>
해당 테마를 가지고 있는 뷰들의 설정을 일괄로 수정이 가능합니다.
<style name="Base.Theme.Android74_MemoApp" parent="Theme.Material3.DayNight.NoActionBar"> <!-- Customize your light theme here. --> <!-- <item name="colorPrimary">@color/my_light_primary</item> --> <item name="android:statusBarColor">@android:color/white</item> <item name="android:background">@android:color/darker_gray</item> <item name="android:windowLightStatusBar">true</item> </style>
또한 스플래시 화면의 경우 하기와 같이 설정하여 사용이 가능합니다.
themes.xml 파일
<style name="Theme.Android74_MemoApp" parent="Base.Theme.Android74_MemoApp" /> <!-- splash Screen Theme --> <style name="AppTheme.Splash" parent="Theme.SplashScreen"> <item name="windowSplashScreenBackground">@color/splashBackground</item> <item name="windowSplashScreenAnimatedIcon">@mipmap/logo</item> <item name="windowSplashScreenAnimationDuration">1000</item> <item name="postSplashScreenTheme">@style/Theme.Android74_MemoApp</item> </style>
MainActivity 파일 내에는 setContentView 전에 작성을 해야 합니다.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // SplashScreen을 적용한다. // setContentView 전에 작성해야 한다. installSplashScreen() activityMainBinding = ActivityMainBinding.inflate(layoutInflater) setContentView(activityMainBinding.root)
프래그먼트 변환 간 애니메이션 설정
fragmentTransaction.setCustomAnimations( // A -> B로 이동을 가정한다. // B가 나타날 때의 애니메이션 R.anim.slide_in, // A가 사라질 때의 애니메이션 R.anim.fade_out, // A가 나타날 때의 애니메이션 R.anim.fade_in, // B가 사라질 때의 애니메이션 R.anim.slide_out )
res - anim 폴더
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- duration : ms단위의 애니메이션 동작 시간 interpolator : 애니메이션 동작 방식 fromAlpha : 시작 투명도 toAlpha : 종료 투명도 --> <alpha android:duration="@android:integer/config_shortAnimTime" android:interpolator="@android:anim/decelerate_interpolator" android:fromAlpha="0" android:toAlpha="1"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- fromXDelta : 시작 가로 위치 (좌표 or 비율) toXDelta : 끝 가로 위치 fromYDelta : 시작 세로 위치 toYDelta : 끝 세로 위치 --> <translate android:duration="@android:integer/config_shortAnimTime" android:interpolator="@android:anim/decelerate_interpolator" android:fromXDelta="100%" android:toXDelta="0%"/> </set>
프래그먼트 번들
프래그먼트에서 번들이란 액티비티에서 intent 를 이용하여 데이터를 주고 받듯이 프래그먼트에서 번들을 이용하여 데이터를 주고 받습니다.
데이터 넣기(정수형)
val newBundle = Bundle() newBundle.putInt("category_idx", categoryIdx)
데이터 받기 (다른 프래그먼트)
데이터를 받을 때는 arguments 을 이용하여 데이터를 받아옵니다.
val categoryIdx = arguments?.getInt("category_idx")
arguments 은 해당 키워드가 없다면 null을 반환합니다.
마무리
확실히 개발에 있어 작성 실력은 해왔던 경험의 차이가 매우 큰 것 같습니다.
잘하는 사람들을 따라 잡기 위해서는 최대한 많은 반복만이 답인 것 같습니다.
오늘의 마음가짐
반복을 쉬지 말자 while(!dead)........
'[THEC!T] 앱 스쿨2기 : Android' 카테고리의 다른 글
TECHIT 앱 스쿨 2기: Android 54일차 (23.07.14) (0) 2023.07.15 TECHIT 앱 스쿨 2기: Android 53일차 (23.07.13) (1) 2023.07.14 TECHIT 앱 스쿨 2기: Android 47일차 (23.07.05) (0) 2023.07.05 TECHIT 앱 스쿨 2기: Android 46일차 (23.07.04) (1) 2023.07.05 TECHIT 앱 스쿨 2기: Android 44 ~ 45일차 (23.07.03) (0) 2023.07.03