Android/Etc

[ Android ] [ Kotlin ] 초기 설정

Design-loving front-end engineer 2021. 12. 15. 09:44

Gradle 변경 사항

build.gradle (:app)

plugins {
    id 'kotlin-kapt'
}

android {
    compileSdkVersion rootProject.compileSdkVersion   
    buildFeatures {
        dataBinding true
    }
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
    }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$rootProject.kotlin_version"
    implementation "androidx.core:core-ktx:$rootProject.ktx_version"
    implementation "androidx.appcompat:appcompat:$rootProject.appCompat_version"
}

 

build.gradle (rootProject)

buildscript {
    ext {
        compileSdkVersion = 30
        minSdkVersion = 26
        targetSdkVersion = 30

        kotlin_version = "1.5.10"
        ktx_version = "1.0.2"
        appCompat_version = "1.1.0"
    }   
}

 

Activity Databinding

MainActivity

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    }
}

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout
    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">

    <androidx.constraintlayout.widget.ConstraintLayout
        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="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>​

 

Fragment Databinding

MainFragment

class MainFragment : Fragment() {

    private lateinit var binding: FragmentMainBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View {
        binding = FragmentMainBinding.inflate(inflater, container, false)
        return binding.root
    }
    
}

 

fragment_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainFragment">      

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

 

Log 설정

LogUtil

class LogUtil {
    companion object {
        private const val TAG = "LogUtil"

        fun v(tag: String, msg: String) {
            val message = buildLogMsg(tag, msg)
            Log.v(TAG, message)
        }

        fun i(tag: String, msg: String) {
            val message = buildLogMsg(tag, msg)
            Log.i(TAG, message)
        }

        fun d(tag: String, msg: String) {
            val message = buildLogMsg(tag, msg)
            Log.d(TAG, message)
        }

        fun w(tag: String, msg: String) {
            val message = buildLogMsg(tag, msg)
            Log.w(TAG, message)
        }

        fun e(tag: String, msg: String) {
            val message = buildLogMsg(tag, msg)
            Log.e(TAG, message)
        }

        private val mStringBuffer = StringBuffer()
        private fun buildLogMsg(tag: String, message: String): String {
            val stackTrace = Thread.currentThread().stackTrace[4]
            mStringBuffer.setLength(0)
            mStringBuffer.append("[ $tag ] ")
            mStringBuffer.append("[ ${stackTrace.methodName}() ] ")
            mStringBuffer.append("[ ${stackTrace.lineNumber} ] ")
            mStringBuffer.append(": $message")
            return mStringBuffer.toString()
        }
    }
}

 

Class TAG 설정

class ClassName {
    companion object {
        private const val TAG = "ClassName"
    }
}

 

색상 설정

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Pastel tone colors -->
    <color name="snow_white">#F0F0EC</color>
    <color name="pink_marshmallow">#F7E2E8</color>
    <color name="almond_blossom">#F5BFCC</color>
    <color name="iced_aqua">#AED6DF</color>
    <color name="papaya_punch">#FEA188</color>
    <color name="whitecap_gray">#E2D9CA</color>
    <color name="ballad_blue">#BFCFDD</color>
    <color name="lemon_verbena">#F5E97A</color>
    <color name="icy_morn">#AED4D2</color>
    <color name="crocus_petal">#BD9DC8</color>

    <!-- Favorite colors -->
    <color name="favorite_black">#595959</color>
    <color name="favorite_blue">#89A5EA</color>
    <color name="favorite_orange">#F28705</color>
</resources>