添加按钮,input搜索公司
This commit is contained in:
@@ -7,12 +7,13 @@ enum class ActionEvent {
|
|||||||
SET_DATA_SOURCE("com.loveerror.bested.SET_DATA_SOURCE", "设置数据源"),
|
SET_DATA_SOURCE("com.loveerror.bested.SET_DATA_SOURCE", "设置数据源"),
|
||||||
HIDE_FLOATING_BUTTON("com.loveerror.bested.HIDE_FLOATING_BUTTON", "隐藏悬浮按钮"),
|
HIDE_FLOATING_BUTTON("com.loveerror.bested.HIDE_FLOATING_BUTTON", "隐藏悬浮按钮"),
|
||||||
PRINT_CURRENT_PAGE("com.loveerror.bested.PRINT_CURRENT_PAGE", "打印当前界面"),
|
PRINT_CURRENT_PAGE("com.loveerror.bested.PRINT_CURRENT_PAGE", "打印当前界面"),
|
||||||
|
QUERY_COMPANY_REGISTER("com.loveerror.bested.QUERY_COMPANY_REGISTER", "查询公司是否注册",isDisplay = true, menuWithText = true),
|
||||||
UNKNOWN("com.loveerror.bested.UNKNOWN", "未知",isDisplay = false);
|
UNKNOWN("com.loveerror.bested.UNKNOWN", "未知",isDisplay = false);
|
||||||
|
|
||||||
constructor(event: String, menuName: String, isDisplay: Boolean = true){
|
constructor(event: String, menuName: String, isDisplay: Boolean = true, menuWithText: Boolean= false){
|
||||||
this.event = event
|
this.event = event
|
||||||
this.menuName = menuName
|
this.menuName = menuName
|
||||||
|
this.menuWithText = menuWithText
|
||||||
this.isDisplay = isDisplay
|
this.isDisplay = isDisplay
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,6 +22,8 @@ enum class ActionEvent {
|
|||||||
|
|
||||||
val isDisplay: Boolean
|
val isDisplay: Boolean
|
||||||
|
|
||||||
|
val menuWithText: Boolean
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun getByMenuName(menuName: String) :ActionEvent {
|
fun getByMenuName(menuName: String) :ActionEvent {
|
||||||
for (item in ActionEvent.entries){
|
for (item in ActionEvent.entries){
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
package com.loveerror.bested.button
|
package com.loveerror.bested.button
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.*
|
import android.graphics.*
|
||||||
|
import android.text.InputType
|
||||||
|
import android.text.method.ScrollingMovementMethod
|
||||||
|
import android.view.Gravity
|
||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
|
import android.widget.EditText
|
||||||
import android.widget.PopupMenu
|
import android.widget.PopupMenu
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.ContextWrapper
|
||||||
|
import android.app.Application
|
||||||
|
import android.widget.Toast
|
||||||
class DragFloatingButton(context: Context) : View(context) {
|
class DragFloatingButton(context: Context) : View(context) {
|
||||||
private val paint = Paint().apply {
|
private val paint = Paint().apply {
|
||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
@@ -121,25 +129,114 @@ class DragFloatingButton(context: Context) : View(context) {
|
|||||||
// 添加菜单项 use ActionEvent
|
// 添加菜单项 use ActionEvent
|
||||||
for (item in ActionEvent.entries){
|
for (item in ActionEvent.entries){
|
||||||
if (item.isDisplay) {
|
if (item.isDisplay) {
|
||||||
popup.menu.add(item.menuName)
|
// 检查是否需要文本输入
|
||||||
|
if (item.menuWithText) {
|
||||||
|
popup.menu.add(0, item.ordinal, 0, item.menuName).setOnMenuItemClickListener {
|
||||||
|
showTextInputDialog(item)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
popup.menu.add(0, item.ordinal, 0, item.menuName)
|
||||||
|
}
|
||||||
|
// popup.menu.add(item.menuName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 为不需要文本输入的菜单项设置监听器
|
||||||
popup.setOnMenuItemClickListener { item ->
|
popup.setOnMenuItemClickListener { item ->
|
||||||
val actionEvent = ActionEvent.getByMenuName(item.title.toString())
|
val actionEvent = ActionEvent.entries.find { it.ordinal == item.itemId }
|
||||||
try {
|
if (actionEvent != null && !actionEvent.menuWithText) {
|
||||||
context.sendBroadcast(android.content.Intent(actionEvent.event).apply {
|
triggerActionEvent(actionEvent)
|
||||||
setPackage(context.packageName)
|
|
||||||
})
|
|
||||||
} catch (e: IllegalArgumentException) {
|
|
||||||
// 处理枚举值不存在的情况
|
|
||||||
e.printStackTrace()
|
|
||||||
println("枚举值不存在: ${item.title},${actionEvent}, ${e.toString()}")
|
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
popup.show()
|
popup.show()
|
||||||
|
// popup.setOnMenuItemClickListener { item ->
|
||||||
|
// val actionEvent = ActionEvent.getByMenuName(item.title.toString())
|
||||||
|
// try {
|
||||||
|
// context.sendBroadcast(android.content.Intent(actionEvent.event).apply {
|
||||||
|
// setPackage(context.packageName)
|
||||||
|
// })
|
||||||
|
// } catch (e: IllegalArgumentException) {
|
||||||
|
// // 处理枚举值不存在的情况
|
||||||
|
// e.printStackTrace()
|
||||||
|
// println("枚举值不存在: ${item.title},${actionEvent}, ${e.toString()}")
|
||||||
|
// }
|
||||||
|
// true
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// popup.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showTextInputDialog(actionEvent: ActionEvent) {
|
||||||
|
println("Attempting to show text input dialog for: ${actionEvent.menuName}")
|
||||||
|
|
||||||
|
val editText = EditText(context).apply {
|
||||||
|
inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE
|
||||||
|
setLines(5)
|
||||||
|
gravity = Gravity.TOP or Gravity.START
|
||||||
|
setTextIsSelectable(true)
|
||||||
|
movementMethod = ScrollingMovementMethod.getInstance()
|
||||||
|
}
|
||||||
|
|
||||||
|
val dialog = AlertDialog.Builder(context)
|
||||||
|
.setTitle("请输入公司名称")
|
||||||
|
.setView(editText)
|
||||||
|
.setPositiveButton("确定", null) // 先设置为null,稍后手动处理
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.create()
|
||||||
|
|
||||||
|
// 手动处理PositiveButton点击事件
|
||||||
|
dialog.setOnShowListener {
|
||||||
|
val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
|
||||||
|
positiveButton.setOnClickListener {
|
||||||
|
val inputText = editText.text.toString().trim()
|
||||||
|
// 如果文本为空,则显示提示并不关闭对话框
|
||||||
|
if (inputText.isEmpty()) {
|
||||||
|
// 在EditText下方显示错误提示
|
||||||
|
editText.error = "请输入公司名称"
|
||||||
|
// 不关闭对话框
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
// 输入有效,触发事件并关闭对话框
|
||||||
|
triggerActionEvent(actionEvent, inputText)
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置对话框类型为系统级对话框
|
||||||
|
val window = dialog.window
|
||||||
|
window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
|
||||||
|
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun getContextForDialog(): Context? {
|
||||||
|
var currentContext = context
|
||||||
|
while (currentContext is ContextWrapper) {
|
||||||
|
if (currentContext is Activity && !currentContext.isFinishing) {
|
||||||
|
return currentContext
|
||||||
|
}
|
||||||
|
currentContext = currentContext.baseContext
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun triggerActionEvent(actionEvent: ActionEvent, textInput: String? = null) {
|
||||||
|
try {
|
||||||
|
val intent = android.content.Intent(actionEvent.event).apply {
|
||||||
|
setPackage(context.packageName)
|
||||||
|
}
|
||||||
|
// 如果有文本输入,添加到Intent中
|
||||||
|
textInput?.let {
|
||||||
|
intent.putExtra("textInput", it)
|
||||||
|
}
|
||||||
|
context.sendBroadcast(intent)
|
||||||
|
} catch (e: IllegalArgumentException) {
|
||||||
|
e.printStackTrace()
|
||||||
|
println("枚举值不存在: $actionEvent, ${e.toString()}")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user