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.