2011-12-15 89 views
7

我試圖實現每文檔這裏單聲道Android應用搜索對話框: http://developer.android.com/guide/topics/search/search-dialog.html搜索對話框中單的Android

我有一個用戶應該能夠從搜索活動:

[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,但我不確定。

UPDATE 1/3/2012: 我已經發布了一個項目,這些項目是在這裏最基本的元素。按下Android上的搜索按鈕,您應該會看到SearchDialog,但它不會出現:Demo Project Here

回答

4

問題出在MainActivity[MetaData]屬性上。如果您提供一流的正確命名空間的版本出現在搜索對話框正確:

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

對不起,我等了這麼久接受了答案。此解決方案有效但缺少一些信息。首先,Google文檔暗示在您的活動名稱前添加「。」將完全限定它顯然是錯誤的。其次,命名空間必須是小寫。我已經嘗試完全限定類名,但它不起作用,因爲我的名字空間中有大寫字母。我不明白爲什麼會這樣。 – dubj

+0

Java要求命名空間是小寫的,所以Android的Mono在幕後爲您翻譯。在這種情況下,您必須使用Java完全限定的類名稱。您可以自定義將在項目屬性中使用的名稱空間,並且您可以始終檢查在打包期間生成的obj/Debug/android文件夾中生成的AndroidManifest.xml文件,以查看正在生成的內容。 –

+0

不知道有關Java命名空間或如何找到生成的清單文件。我試圖看的一個(包裝在apk中)是二進制格式。這非常有幫助,謝謝! – dubj

0

我覺得在清單文件中,searachable元數據標籤不正確的(機器人:名字=「android.app.searchable 「)

樣品清單 - MainActivity標籤 -

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

小號earchActivity標籤 -

<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> 
1

在serachable.xml你不能有一個常量字符串作爲名稱和提示......他們應該動態鏈接@string/my_app_name@string/my_hint

和一切工作的罰款!