Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内置搜索对话框中的应用程序图标是否可以单击?_Java_Android - Fatal编程技术网

Java 内置搜索对话框中的应用程序图标是否可以单击?

Java 内置搜索对话框中的应用程序图标是否可以单击?,java,android,Java,Android,当用户单击内置搜索对话框中的应用程序图标时,是否仍需要捕获?请注意,我指的不是自定义对话框,而是android内置的搜索对话框。不,没有办法使搜索对话框的应用程序图标可点击 但只是为了好玩,让我们假设存在一些可以完成工作的黑客解决方法。酷,我们已经得到了想要的行为。。。但现在我们有两个问题: SearchDialog的行为与其他Android设备不一致。这会减少用户体验,因为用户希望搜索界面在所有Android设备上都能正常工作 您的应用程序现在使用内部API,这些API在新SDK发布时可能保持

当用户单击内置搜索对话框中的应用程序图标时,是否仍需要捕获?请注意,我指的不是自定义对话框,而是android内置的搜索对话框。

不,没有办法使
搜索对话框的应用程序图标可点击

但只是为了好玩,让我们假设存在一些可以完成工作的黑客解决方法。酷,我们已经得到了想要的行为。。。但现在我们有两个问题:

  • 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,如果你建议他从头开始重新编写搜索界面,那么祝你好运。。。