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.
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() } } } }
<?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.