2013-05-16 6 views
10

Android 2.3.3nie znaleziono zasobu, który pasuje do danej nazwy Theme.Sherlock.Dialog

Przeszukałem więc na rozwiązanie, ale nie mogę zrozumieć rozwiązania podane. Jeśli ktoś może wyjaśnić w prosty sposób, jak pozbyć się tego błędu, byłbym wdzięczny.

Używam ActionBarSherlock w mojej aplikacji. Mój podstawowy motyw, Theme.Sherlock.Light, działa dobrze z wszystkimi działaniami. Dla jednej czynności chcę, aby moja aktywność wyglądała jak okno dialogowe i dlatego chciałem użyć Theme.Sherlock.Dialog.

Oto moja deklaracja pliku manifestu.

<activity 
    android:name="com.xxx.xx.x.Activity" 
    android:theme="@style/Theme.Sherlock.Dialog" > 
</activity> 

Ale pojawia się następujący błąd w moim XML: error: Error: No resource found that matches the given name (at 'theme' with value '@style/Theme.Sherlock.Dialog').. Dlaczego otrzymuję to? Co powinienem zrobić, aby to usunąć?

Odpowiedz

29

Tematy dialogowe w ActionBarSherlock zostały usunięte przez JakeWharton ponad cztery miesiące temu.

https://github.com/JakeWharton/ActionBarSherlock/commit/601bde214b56b8fad0b4fc5aaed5af0b531b6135

Wystarczy użyć @android:style/Theme.Dialog i przedłużyć Activity zamiast SherlockActivity. ActionBarSherlock nie robi nic dla okien dialogowych i będzie po prostu narzekał, jeśli nie używasz go, jeśli jest to temat.

+0

Oh .. Okie .. zobaczy, że –

+2

To szkoda. Nasza klasa bazowa, która zapewnia wiele funkcji w naszej aplikacji, dziedziczy po RoboSherlockFragmentActivity. Zgaduję, że wiele aplikacji jest zorganizowanych w ten sposób. Doprowadzi to do deduplikacji kodu klasy bazowej, co jest dość przerażającym wzorcem. – Snicolas

+0

@Snicolas, masz absolutną rację, – Sviatoslav

0

Nie ma stylu w ABS jako Theme.Sherlock.Dialog.

Możesz rozszerzyć tę działalność jeden z aromatów Dialog, np .:

public class MyDialog extends Dialog { 
     // Lots of code 
    } 
1

Theme.Sherlock.Dialog nie jest już wspierane. Korzystam z poniższego podejścia do stylu moich okien dialogowych w DialogFragment. Możesz sprawdzić moją dialog templates.

public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    ContextThemeWrapper context = new ContextThemeWrapper(getActivity(), getTheme(true)); 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    ... 
    return builder.create(); 
} 

private int getTheme(boolean light) 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    { 
     return light ? android.R.style.Theme_DeviceDefault_Light_Dialog : android.R.style.Theme_DeviceDefault_Dialog; 
    } 
    else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    { 
     return light ? android.R.style.Theme_Holo_Light_Dialog : android.R.style.Theme_Holo_Dialog; 
    } 
    else 
    { 
     return android.R.style.Theme_Dialog; 
    } 
} 
1
--- res/values-v14/abs__themes.xml 
+++ res/values-v14/abs__themes.xml 
@@ -26,9 +26,4 @@ 
     <item name="android:windowActionBar">false</item> 
     <item name="android:windowNoTitle">true</item> 
    </style> 
+ 
+ <style name="Theme.Sherlock.Dialog" parent="android:Theme.Holo.Dialog"> 
+ </style> 
+ <style name="Theme.Sherlock.Light.Dialog" parent="android:Theme.Holo.Light.Dialog"> 
+ </style> 
</resources> 
+0

Czy możesz opublikować coś więcej niż tylko swój kod? Być może opis tego, co robi (czy w komentarzach, czy osobno)? – bjb568