效果图:

1.
R.menu.menu_main 设置条目
<menu 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"
tools:context="com.example.user.popupmenu.MainActivity">
<item
android:id="@+id/menu_open_website"
android:title="发起群聊"
android:icon="@drawable/ic_public_black_24dp"/>
<item
android:id="@+id/menu_show_toast"
android:title="扫一扫"
android:icon="@drawable/ic_message_black_24dp"/>
</menu>
2.
activity_pop 点击布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<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:layout_alignParentRight="true"
android:src="@drawable/ic_more_vert_black_24dp"
/>
</RelativeLayout>
3.
MainActivity 设置popupMenu
package com.example.user.popupmenu
import android.app.Activity
import android.os.Bundle
import android.support.v7.widget.PopupMenu
import android.util.Log
import kotlinx.android.synthetic.main.activity_pop.*
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pop)
imageView_options.setOnClickListener {
val popupMenu = PopupMenu(this, it)
popupMenu.setOnMenuItemClickListener { item ->
when (item.itemId){
R.id.menu_open_website -> {
Log.e("Main", "发起群聊")
true
}
R.id.menu_show_toast -> {
Log.e("Main", "扫一扫")
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()
}
}
}
}
源码下载地址:https://github.com/yuki14/kotlin-popup-menu
end
本文展示了如何使用Kotlin创建一个类似于微信应用的扫一扫功能的PopupWindow。通过提供的截图可以看到效果,源码已上传至GitHub,供读者下载参考。

1802

被折叠的 条评论
为什么被折叠?



