Java 内置搜索对话框中的应用程序图标是否可以单击?
当用户单击内置搜索对话框中的应用程序图标时,是否仍需要捕获?请注意,我指的不是自定义对话框,而是android内置的搜索对话框。不,没有办法使Java 内置搜索对话框中的应用程序图标是否可以单击?,java,android,Java,Android,当用户单击内置搜索对话框中的应用程序图标时,是否仍需要捕获?请注意,我指的不是自定义对话框,而是android内置的搜索对话框。不,没有办法使搜索对话框的应用程序图标可点击 但只是为了好玩,让我们假设存在一些可以完成工作的黑客解决方法。酷,我们已经得到了想要的行为。。。但现在我们有两个问题: SearchDialog的行为与其他Android设备不一致。这会减少用户体验,因为用户希望搜索界面在所有Android设备上都能正常工作 您的应用程序现在使用内部API,这些API在新SDK发布时可能保持
搜索对话框的应用程序图标可点击
但只是为了好玩,让我们假设存在一些可以完成工作的黑客解决方法。酷,我们已经得到了想要的行为。。。但现在我们有两个问题:
SearchDialog
的行为与其他Android设备不一致。这会减少用户体验,因为用户希望搜索界面在所有Android设备上都能正常工作
您的应用程序现在使用内部API,这些API在新SDK发布时可能保持一致,也可能不保持一致。众所周知,Android团队可以将@+id/search\u app\u图标
更改为@+id/search\u home\u图标
。您的黑客行为取决于内部API。。。因此,这样的更改将导致运行您的应用程序的较新设备崩溃(因为任何运行时搜索search\u app\u icon
都将返回null
)
此外,三星和HTC等公司在向公众发布新设备之前,可以自由修改内部API。下一代三星Galaxy可能完全重新实现SearchDialog
类,更新其UI/主题,等等。。。你永远无法确定
所以基本上,你不能。。。你不应该这样做
就因为我很无聊,以下是我找到答案的源代码:
请查看的源代码,注意SearchManager
将SearchDialog
保留为私有实例变量
请查看的源代码,注意,SearchDialog
将app图标引用为私有实例变量。还要注意,SearchDialog
通过调用findViewById
初始化变量,如图所示
请查看的源代码,注意默认情况下,ImageView
未设置为clickable
。由于公共SDK中没有(方法)改变此视图的行为,因此没有可靠的方法使其可单击
我确信使用Android的公共SDK是不可能做到这一点的
我认为唯一的解决方案是编写您自己的自定义对话框,但我感到震惊的是,使用内置对话框您无法完成此任务。为什么您不能在对话框上注册一个触控监听器,并推断用户是否在quandrant中单击了图标所在的位置?您如何知道图标所在的位置?您如何知道一开始甚至还有一个图标?你怎么知道图标有多大?你怎么知道三星或HTC没有决定一起删除SearchDialog
?好吧,这可能是一个压力…但是你知道我的意思吗?当然你可以在屏幕的左上角注册一个触控监听器…但是它会很近能够预测每个可能出现的图标显示场景。它在谷歌电视和其他一些没有触摸屏的设备上也不起作用:PAlso,在Android 3.0+上,你可以使用SearchView
作为动作栏中的动作视图……我相信这会给你想要的行为(因为操作栏中的主页图标是可点击的)。不幸的是,grepcode已经不存在了。我以前很喜欢那个网站……所以注册一个查看触摸列表是不可能的?@jaumebd,如果你建议他从头开始重新编写搜索界面,那么祝你好运。。。