2011-12-15 33 views
7

Burada belgelere başına Mono Android uygulamasında bir arama iletişim uygulamak çalışıyorum: http://developer.android.com/guide/topics/search/search-dialog.htmlArama Diyalog Mono Android

Ben kullanıcı arama yapmak mümkün olmalıdır bir etkinliği vardır:

[Activity (Label = "MyActivity", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/MyStyle")] 
[MetaData ("android.app.default_searchable", Value = ".SearchActivity")] 
public class MainActivity : BaseActivity {... 
Ben (ağır kaldırma olur) aranabilir aktiviteye sahiptir:

[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 { ... 

Ve ben searchable.xml vardır:

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

Telefondaki arama tuşuna MainActivity'de bastığımda hiçbir şey olmuyor - iletişim kutusu yok. Sorunumun çalışma zamanında AndroidManifest.xml dosyasına nasıl çevrildiğini düşünüyorum ama emin değilim.

GÜNCELLEME 2012/01/03: Burada en temel unsurla distile bir proje gönderdiniz. Android'inizdeki arama düğmesine basın ve SearchDialog'u görmelisiniz ama görünmüyor: Demo Project Here

cevap

4

Sorun, MainActivity adresindeki [MetaData] özniteliğindedir. sınıfın düzgün isimalanlı sürümünü sağlayın arama diyalog düzgün görünür:

Ben apaçık dosyasında hissetmek
[MetaData ("android.app.default_searchable", Value = "searchdialogtest.SearchActivity")] 
public class MainActivity : BaseActivity { 
+0

Maalesef cevabı kabul etmek için çok bekledim. Bu çözüm işe yaramadı ancak bazı bilgiler eksikti. Her şeyden önce, Google Dokümanlar, Etkinlik adınızı bir "." Ile ön ekleyerek ima eder. görünüşe göre yanlış olanı tam olarak nitelendirecek. İkincisi, isim alanı küçük harf olmalıdır. Zaten sınıf adını tam olarak nitelendirmeyi denedim, ancak isim-alanımın içinde büyük harf karakterleri olduğu için işe yaramadı. Bunun neden böyle olacağını anlamıyorum. – dubj

+0

Java, indirilecek ad alanlarına ihtiyaç duyduğundan, Android için Mono, bunu sahne arkasına çevirir. Bu durumda, Java tam nitelikli sınıf adını kullanmanız gerekiyordu. Proje özelliklerinde kullanılacak ad alanını özelleştirebilir ve neyin üretildiğini görmek için obj/Debug/android klasöründe paketlemede üretilen AndroidManifest.xml dosyasını her zaman kontrol edebilirsiniz. –

+0

Java ad alanları veya oluşturulan manifest dosyasının nasıl bulunacağını bilmiyordum. Bakmaya çalıştığım (apk'de paketlenmiş) ikili formattaydı. Bu çok yardımcı oldu, teşekkürler! – dubj

0

, searachable meta veri etiketi uygun değil (android: name = "android.app.searchable ")

Numune Manifest - MainActivity Etiket -

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

S earchActivity etiketi - serachable.xml içinde

<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

bir isim ve ipucu olarak sabit bir dize olamaz ... dinamik olarak @string/my_app_name@string/my_hint

bağlantılı ve tüm çalışma en ince olmalıdır!