You are on page 1of 29

NATIVE ANDROID

WITH KOTLIN
‣ Kotlin in action
BASIC ANDROID DEVELOPMENT

LETS START WITH


SMALL STEP

Angga Raditya
BASIC ANDROID DEVELOPMENT

ANDROID STUDIO
https://developer.android.com/studio

Prerequisite

‣ Basic Kotlin

‣ You don’t need to install JDK because a copy of the latest OpenJDK comes
bundled with Android Studio 2.2 and higher, and this is the JDK version we
recommend you use for your Android projects.
BASIC ANDROID DEVELOPMENT

CREATE NEW PROJECT


BASIC ANDROID DEVELOPMENT

SELECT YOUR MINIMUM API LEVEL


BASIC ANDROID DEVELOPMENT

PROJECT STRUCTURE

Declare all Activity, Permission, and Intent Filters

Declare all Activity, Permission, and Intent Filters

Design your UI layout


BASIC ANDROID DEVELOPMENT

LAYOUT
▸ Create new layout in your resource folder for layout

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Hello World!!" />
</RelativeL
BASIC ANDROID DEVELOPMENT

ACTIVITY

class MainActivity: AppCompatActivity(){

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.main_layout)

}
BASIC ANDROID DEVELOPMENT

ANDROID MANIFEST

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.enigma.tictactoe">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".main.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
BASIC ANDROID DEVELOPMENT

RESULT
TEXT

LETS PUT SOME


ACTION

Angga
BASIC ANDROID DEVELOPMENT

EditText
When you press the
button the name input
will show on the
textView below
TEXT

ADDING MATERIAL COMPONENTS


dependencies {

...

implementation ‘com.google.android.material:material:1.1.0-rc02'
Add material dependencies at
implementation ‘de.hdodenhof:circleimageview:3.1.0' your gradle file
...

<resources>

<!-- Base application theme. -->


<style name="AppTheme" parent="Theme.MaterialComponents">
<!-- Customize your theme here. -->
<item name="colorPrimary">#f0134d</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
Modify your style files in resource
<item name="colorAccent">@color/colorAccent</item>

<!-- New MaterialComponents attributes. -->

...

</style>

</resources>
TEXT

WHAT IS MATERIAL

Material is an adaptable system of guidelines, components, and tools that


support the best practices of user interface design. Backed by open-source
code, Material streamlines collaboration between designers and developers,
and helps teams quickly build beautiful products. By Google
TEXT

CONSTRAINT LAYOUT
TEXT

ADD EVENT LISTENER IN MAINACTIVITY

class MainActivity : AppCompatActivity() {

lateinit var resultTextView: MaterialTextView


lateinit var nameEditText: TextInputEditText

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
resultTextView = findViewById(R.id.resultTextView)
nameEditText = findViewById(R.id.name_edit_text)
}

fun showName(view: View){


val name = nameEditText.text
resultTextView.setText(name)
}
}
TEXT

LETS MOVE TO
ANOTHER
ACTIVITY
Angga Raditya
TEXT

CREATE INTENT
TEXT

MAIN ACTIVITY
class MainActivity : AppCompatActivity() {

lateinit var nameEditText: TextInputEditText

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
nameEditText = findViewById(R.id.name_edit_text)
}

fun moveToSecondActivity(view: View){ Start a New Activity by


val intent = Intent(this, SecondActivity::class.java)
intent.putExtra(PLAYERS_NAME, nameEditText.text.toString())
create an Intent and put
startActivity(intent) some Extras on it
}

companion object{
val PLAYERS_NAME = "PLAYERS_NAME"
}

}
TEXT

SECOND ACTIVITY

class SecondActivity: AppCompatActivity() {

lateinit var nameTextView: TextView

override fun onCreate(savedInstanceState: Bundle?) {


super.onCreate(savedInstanceState)
setContentView(R.layout.second_activity)
nameTextView = findViewById(R.id.userName)
val userName = intent.getStringExtra(MainActivity.PLAYERS_NAME)
nameTextView.setText(userName)
}

Get Extras from an Intent


TEXT

INTENT
An Intent provides a facility for performing late runtime binding between the code
in different applications. Its most significant use is in the launching of activities,
where it can be thought of as the glue between activities. It is basically a passive
data structure holding an abstract description of an action to be performed.

MainActivity SecondActivity
Intent
SecondActivity

Extra 1

Extra n

startActivity()
TEXT

UNDERSTAND THE
ACTIVITY

Angga Raditya
TEXT

ANDROID ACTIVITY
class MainActivity : AppCompatActivity() {

lateinit var nameEditText: TextInputEditText


val activityName="MAIN ACTIVITY" class SecondActivity: AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) { lateinit var nameTextView: TextView


super.onCreate(savedInstanceState) val activityName="SECOND ACTIVITY"
setContentView(R.layout.activity_main)
nameEditText = findViewById(R.id.name_edit_text)
Log.i(activityName,"OnCreate() DIPANGGIL") override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
} setContentView(R.layout.second_activity)
nameTextView = findViewById(R.id.userName)
fun moveToSecondActivity(view: View){ val userName = intent.getStringExtra(MainActivity.PLAYERS_NAME)
val intent = Intent(this, SecondActivity::class.java) nameTextView.setText(userName)
intent.putExtra(PLAYERS_NAME, nameEditText.text.toString()) Log.i(activityName,"OnStart() DIPANGGIL")
startActivity(intent)
} }

override fun onStart() { override fun onStart() {


super.onStart() super.onStart()
Log.i(activityName,"OnStart() DIPANGGIL") Log.i(activityName,"OnStart() DIPANGGIL")
} }

override fun onResume() { override fun onResume() {


super.onResume() super.onResume()
Log.i(activityName,"OnResume() DIPANGGIL") Log.i(activityName,"OnResume() DIPANGGIL")
} }

override fun onPause() { override fun onPause() {


super.onPause() super.onPause()
Log.i(activityName,"OnPause() DIPANGGIL") Log.i(activityName,"OnPause() DIPANGGIL")
} }

override fun onStop() { override fun onStop() {


super.onStop() super.onStop()
Log.i(activityName,"OnStop() DIPANGGIL") Log.i(activityName,"OnStop() DIPANGGIL")
} }

override fun onDestroy() { override fun onDestroy() {


super.onDestroy() super.onDestroy()
Log.i(activityName,"OnDestroy() DIPANGGIL") Log.i(activityName,"OnDestroy() DIPANGGIL")
} }

override fun onRestart() { override fun onRestart() {


super.onRestart() super.onRestart()
Log.i(activityName,"OnRestart() DIPANGGIL") Log.i(activityName,"OnRestart() DIPANGGIL")
} }

companion object{ }
val PLAYERS_NAME = "PLAYERS_NAME"
}
}
TEXT

LETS START

MainActivity
Launched stratActivity() Back button pressed

destroyed!!

Second Activity Main Activity

Main Activity Main Activity


TEXT

MORE EXPERIMENT
TEXT

IT’S TIME FOR


CODE CHALLENGE

Angga Raditya
TEXT

THE TIC TAC TOE GAME

You might also like