Learn how to create a popup menu with icons in this Kotlin Android tutorial!
You will learn how to create a menu resource, how to code the popup menu and then how to show icons in the popup menu. It’s a bit trickier than it may seem!
This post contains all the code that’s been written in this YouTube video.
You can also check out this GitHub repository: https://github.com/ResoCoder/PopupMenuTutorial
MainActivity.kt
package com.resocoder.popupmenutut
import android.content.Intent
import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.widget.PopupMenu
import android.util.Log
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
imageView_options.setOnClickListener {
val popupMenu = PopupMenu(this, it)
popupMenu.setOnMenuItemClickListener { item ->
when (item.itemId){
R.id.menu_open_website -> {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://resocoder.com"))
startActivity(intent)
true
}
R.id.menu_show_toast -> {
Toast.makeText(this, "Showing Toast!", Toast.LENGTH_LONG).show()
true
}
else -> false
}
}
popupMenu.inflate(R.menu.menu_main)
try {
val fieldMPopup = PopupMenu::class.java.getDeclaredField("mPopup")
fieldMPopup.isAccessible = true
val mPopup = fieldMPopup.get(popupMenu)
mPopup.javaClass
.getDeclaredMethod("setForceShowIcon", Boolean::class.java)
.invoke(mPopup, true)
} catch (e: Exception){
Log.e("Main", "Error showing menu icons.", e)
} finally {
popupMenu.show()
}
}
}
}
menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_open_website"
android:title="Open Website"
android:icon="@drawable/ic_public_black_24dp"/>
<item
android:id="@+id/menu_show_toast"
android:title="Show Toast"
android:icon="@drawable/ic_message_black_24dp"/>
</menu>
activity_main.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="com.resocoder.popupmenutut.MainActivity">
<ImageView
android:id="@+id/imageView_options"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:src="@drawable/ic_more_vert_black_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.68"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.42" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:src="@drawable/logoround512"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>


Thanks so much for contributing to the coding ecosystem. Your video was incredibly well done, you are well spoken and go at a very good pace for the complexity of the work you are doing. I also think using YouTube as the system of delivery is good as people can go through the material at their own pace.
Again thank you.
I’m extremely happy that I could help you. Thanks.
Hi please contact me
[email protected]
Thank you. Nice guide.
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me? https://accounts.binance.com/sk/register?ref=OMM3XK51
Your point of view caught my eye and was very interesting. Thanks. I have a question for you. https://accounts.binance.com/en/register?ref=JHQQKNKN
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.