【问题标题】:Search Dialog in Mono AndroidMono Android 中的搜索对话框
【发布时间】:2012-01-21 11:07:04
【问题描述】:

我正在尝试按照此处的文档在 Mono Android 应用中实现搜索对话框: http://developer.android.com/guide/topics/search/search-dialog.html

我有一个用户应该可以搜索的活动:

[Activity (Label = "MyActivity", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/MyStyle")]
[MetaData ("android.app.default_searchable", Value = ".SearchActivity")]
public class MainActivity : BaseActivity {...

我有一个可搜索的活动(繁重的活动会发生):

[Activity(Theme = "@style/MyStyle", Label = "Searchable", LaunchMode = Android.Content.PM.LaunchMode.SingleTop)]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { Intent.CategoryLauncher, Intent.ActionSearch })]
[MetaData("searchable", Resource = "@xml/searchable")]
public class SearchActivity : BaseActivity { ...

我有我的 searchable.xml:

<?xml version="1.0" encoding="utf-8"?>
<searchable
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:label="MyLabel"
  android:hint="Search Products">
</searchable>

当我在 MainActivity 中按手机上的搜索键时,什么也没有发生 - 没有对话框。我认为我的问题在于如何在运行时将属性转换为 AndroidManifest.xml,但我不确定。

2012 年 1 月 3 日更新: 我在这里发布了一个提炼为最基本元素的项目。按 Android 上的搜索按钮,您应该会看到 SearchDialog 但它没有出现:Demo Project Here

【问题讨论】:

    标签: c# android search mono xamarin.android


    【解决方案1】:

    问题出在MainActivity[MetaData] 属性中。如果您提供正确命名空间的类版本,搜索对话框将正确显示:

    [MetaData ("android.app.default_searchable", Value = "searchdialogtest.SearchActivity")]
    public class MainActivity : BaseActivity {
    

    【讨论】:

    • 对不起,我等了这么久才接受答案。该解决方案有效,但缺少一些信息。首先,Google Docs 暗示你的 Activity 名称要以“.”作为前缀。将完全限定它显然是错误的。其次,命名空间必须小写。我已经尝试过完全限定类名,但它不起作用,因为我的命名空间中有大写字符。我不明白为什么会这样。
    • Java 要求命名空间小写,所以 Mono for Android 会在幕后为您翻译。在这种情况下,您必须使用 Java 完全限定的类名。您可以自定义将在项目属性中使用的命名空间,并且您可以随时查看 obj/Debug/android 文件夹中打包时生成的 AndroidManifest.xml 文件以查看生成的内容。
    • 不知道 Java 命名空间或如何找到生成的清单文件。我试图查看的(打包在 apk 中)是二进制格式的。这很有帮助,谢谢!
    【解决方案2】:

    在您的 serachable.xml 中,您不能将常量字符串作为名称和提示...它们应该动态链接 @string/my_app_name @string/my_hint

    一切正常!

    【讨论】:

      【解决方案3】:

      感觉manifest文件中,searachable meta-data标签不合适(android:name="android.app.searchable")

      样品清单 - MainActivity 标记 -

      <activity android:name=".MainActivity"> <meta-data android:name="android.app.default_searchable" android:value="pckname.SearchClass"/> </activity>

      SearchActivity 标记 -

      <activity android:name=".SearchActivity" >
      <intent-filter>
          <action android:name="android.intent.action.SEARCH" /> 
          <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter> 
        <meta-data 
          android:name="android.app.searchable"
          android:resource="@xml/searchable" /></activity>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-05
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 2014-04-05
        相关资源
        最近更新 更多