AlertDialog Sample

In this project, I used two alert dialog, one with single positive button and other with positive, negative and neutral button.

Project URL: https://gitlab.com/kotlin-samples/AlertDialog-Sample

activity_main.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
xmlns:app=”http://schemas.android.com/apk/res-auto&#8221;
xmlns:tools=”http://schemas.android.com/tools&#8221;
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”>

<Button
android:id=”@+id/alert1″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/call_alert_1″
app:layout_constraintBottom_toTopOf=”@+id/alert2″
app:layout_constraintLeft_toLeftOf=”parent”
app:layout_constraintRight_toRightOf=”parent”
app:layout_constraintTop_toTopOf=”parent” />

<Button
android:id=”@+id/alert2″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”@string/call_alert_2″
app:layout_constraintBottom_toBottomOf=”parent”
app:layout_constraintLeft_toLeftOf=”parent”
app:layout_constraintRight_toRightOf=”parent”
app:layout_constraintTop_toBottomOf=”@+id/alert1″ />

</android.support.constraint.ConstraintLayout>

MainActivity.kt

package com.mathi.alertdialogsample

import android.content.DialogInterface
import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {
internal var builder: AlertDialog.Builder? = null

internal var alert1: Button? = null
internal var alert2: Button? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

alert1 = findViewById(R.id.alert1) as Button
alert2 = findViewById(R.id.alert2) as Button

alert1!!.setOnClickListener(alert1OnClickListener)
alert2!!.setOnClickListener(alert2OnClickListener)

builder = AlertDialog.Builder(this@MainActivity)
}

private val alert1OnClickListener = View.OnClickListener { showAlert1() }

private val alert2OnClickListener = View.OnClickListener { showAlert2() }

private fun showAlert1() {
builder!!.setTitle(getText(R.string.alert_1))
builder!!.setMessage(getText(R.string.alert_1_msg))
builder!!.setIcon(R.drawable.ic_done)
builder!!.setPositiveButton(getText(R.string.ok), okOnClickListener)
builder!!.show()
}

private val okOnClickListener = DialogInterface.OnClickListener { dialog, which -> Toast.makeText(this@MainActivity, getText(R.string.you_pressed_ok), Toast.LENGTH_SHORT).show() }

private fun showAlert2() {
builder!!.setTitle(getText(R.string.alert_2))
builder!!.setMessage(getText(R.string.alert_2_msg))
builder!!.setIcon(R.drawable.ic_done)
builder!!.setPositiveButton(getText(R.string.ok), okOnClickListener)
builder!!.setNegativeButton(getText(R.string.cancel), cancelOnClickListener)
builder!!.setNeutralButton(getText(R.string.close), closeOnClickListener)
builder!!.show()
}

private val cancelOnClickListener = DialogInterface.OnClickListener { dialog, which -> Toast.makeText(this@MainActivity, getText(R.string.you_pressed_cancel), Toast.LENGTH_SHORT).show() }

private val closeOnClickListener = DialogInterface.OnClickListener { dialog, which -> Toast.makeText(this@MainActivity, getText(R.string.you_pressed_close), Toast.LENGTH_SHORT).show() }
}

RecyclerView Sample

In this sample project, I used RecyclerView and CardView to show list of android versions.

Project URL: https://gitlab.com/kotlin-samples/recyclerview-sample

In app’s root build.gradle file, add the following codes.

dependencies {
….
compile ‘com.android.support:recyclerview-v7:25.3.1’
compile ‘com.android.support:cardview-v7:25.3.1’
}

main_activity.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
xmlns:app=”http://schemas.android.com/apk/res-auto&#8221;
xmlns:tools=”http://schemas.android.com/tools&#8221;
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”>

<android.support.v7.widget.RecyclerView
android:id=”@+id/android_recycler_view”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
app:layout_constraintBottom_toBottomOf=”parent”
app:layout_constraintLeft_toLeftOf=”parent”
app:layout_constraintRight_toRightOf=”parent”
app:layout_constraintTop_toTopOf=”parent” />

</android.support.constraint.ConstraintLayout>

layout_android_list.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<android.support.constraint.ConstraintLayout xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
xmlns:app=”http://schemas.android.com/apk/res-auto&#8221;
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_margin=”8dp”>

<android.support.v7.widget.CardView
android:id=”@+id/android_layout”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
app:cardBackgroundColor=”@android:color/white”>

<android.support.constraint.ConstraintLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”>

<TextView
android:id=”@+id/name”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:padding=”4dp”
android:textAppearance=”?android:textAppearanceLarge”
android:textColor=”@color/colorPrimaryDark” />

<TextView
android:id=”@+id/api”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:padding=”4dp”
android:textAppearance=”?android:textAppearanceMedium”
android:textColor=”@color/colorPrimaryDark”
app:layout_constraintTop_toBottomOf=”@+id/name” />

<TextView
android:id=”@+id/version”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:padding=”4dp”
android:textAppearance=”?android:textAppearanceMedium”
android:textColor=”@color/colorPrimaryDark”
app:layout_constraintLeft_toRightOf=”@+id/api”
app:layout_constraintTop_toBottomOf=”@+id/name” />

</android.support.constraint.ConstraintLayout>

</android.support.v7.widget.CardView>
</android.support.constraint.ConstraintLayout>

Android.kt [Bean class]

package com.mathi.recyclerviewsample

class Android(var name: String?, var api: String?, var verison: String?)

CustomViewHolder.kt

package com.mathi.recyclerviewsample

import android.support.v7.widget.RecyclerView
import android.view.View
import android.widget.TextView

class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

var androidLayout: View
var name: TextView
var api: TextView
var version: TextView

init {

androidLayout = itemView.findViewById(R.id.android_layout)
name = itemView.findViewById(R.id.name) as TextView
api = itemView.findViewById(R.id.api) as TextView
version = itemView.findViewById(R.id.version) as TextView
}
}

CustomAdapter.kt

package com.mathi.recyclerviewsample

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Toast

class CustomAdapter(internal var context: Context, internal var androidList: List<Android>) : RecyclerView.Adapter<CustomViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.layout_android_list, parent, false)

return CustomViewHolder(itemView)
}

override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {

holder.name.text = androidList[position].name
holder.api.text = context.getString(R.string.api) + “: ” + androidList[position].api
holder.version.text = context.getString(R.string.version) + “: ” + androidList[position].verison

holder.androidLayout.setOnClickListener { Toast.makeText(context, holder.name.text, Toast.LENGTH_SHORT).show() }

}

override fun getItemCount(): Int {
return androidList.size
}
}

MainActivity.kt

package com.mathi.recyclerviewsample

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import java.util.*

class MainActivity : AppCompatActivity() {

internal var androidRecyclerView: RecyclerView? = null
internal var androidList: MutableList<Android>? = null
internal var customAdapter: CustomAdapter? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

androidRecyclerView = findViewById(R.id.android_recycler_view) as RecyclerView

androidList = ArrayList<Android>()
setValues()

customAdapter = CustomAdapter(this@MainActivity, androidList!!)

val mLayoutManager = LinearLayoutManager(applicationContext)
androidRecyclerView!!.layoutManager = mLayoutManager
androidRecyclerView!!.adapter = customAdapter
}

private fun setValues() {
androidList!!.add(Android(“Cupcake”, “3”, “1.5”))
androidList!!.add(Android(“Donut”, “4”, “1.6”))
androidList!!.add(Android(“Eclair”, “5-7”, “2.0 – 2.1”))
androidList!!.add(Android(“Froyo”, “8”, “2.2 – 2.2.3”))
androidList!!.add(Android(“Gingerbread”, “9 – 10”, “2.3 – 2.3.7”))
androidList!!.add(Android(“Honeycomb”, “11 – 13”, “3.0 – 3.2.6”))
androidList!!.add(Android(“Ice Cream Sandwich”, “14 – 15”, “4.0 – 4.0.4”))
androidList!!.add(Android(“Jelly Bean”, “16 – 18”, “4.1 – 4.3.1”))
androidList!!.add(Android(“Kitkat”, “19 – 20”, “4.4 – 4.4.4”))
androidList!!.add(Android(“Lollipop”, “21 – 22”, “5.0 – 5.1.1”))
androidList!!.add(Android(“Marshmallow”, “23”, “6.0 – 6.0.1”))
androidList!!.add(Android(“Nougat”, “24 – 25”, “7.0 – 7.1.2”))
}
}

Menu Sample

In this sample project, I have added menu xml file and inflated in Activity. Drawables can be added by the following the steps in this link.

Project URL: https://gitlab.com/kotlin-samples/menu-sample/ 

menu.xml

<?xml version=”1.0″ encoding=”utf-8″?>
<menu xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
xmlns:app=”http://schemas.android.com/apk/res-auto”&gt;

<item
android:id=”@+id/menu_1″
android:icon=”@drawable/ic_menu_1″
android:title=”Menu 1″
app:showAsAction=”always” />

<item
android:id=”@+id/menu_2″
android:icon=”@drawable/ic_menu_2″
android:title=”Menu 2″ />

<item
android:id=”@+id/menu_3″
android:icon=”@drawable/ic_menu_3″
android:title=”Menu 3″ />

<item
android:id=”@+id/menu_4″
android:icon=”@drawable/ic_menu_4″
android:title=”Menu 4″ />

</menu>

MainActivity.kt

package com.mathi.menusample

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.main, menu)
return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_1 -> {
Toast.makeText(this, “Menu 1 is selected”, Toast.LENGTH_SHORT).show()
return true
}
R.id.menu_2 -> {
Toast.makeText(this, “Menu 2 is selected”, Toast.LENGTH_SHORT).show()
return true
}
R.id.menu_3 -> {
Toast.makeText(this, “Menu 3 is selected”, Toast.LENGTH_SHORT).show()
return true
}
R.id.menu_4 -> {
Toast.makeText(this, “Menu 4 is selected”, Toast.LENGTH_SHORT).show()
return true
}
else -> return super.onOptionsItemSelected(item)
}
}
}

This slideshow requires JavaScript.

Hello World 2

In this sample project, I just used a TextView to show texts without declaring as a variable[var/val].

main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

In build.gradle of app. Add the following plugin:

apply plugin: 'kotlin-android-extensions'

In MainActivity.kt, add the following import with your layout xml name

import kotlinx.android.synthetic.main.<layout_xml>.*

and you can handle the view by it’s id.

package com.mathi.helloworld2

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

text.setText("Hello World!")
}
}

Project URL: https://gitlab.com/kotlin-samples/hello-world2

Screenshot_20170613-211820Refer:
https://kotlinlang.org/docs/tutorials/android-plugin.html