2013-05-16 68 views
10

Android 2.3.3找不到与指定名称相匹配的资源Theme.Sherlock.Dialog

我已经搜索到了一个解决方案,但我无法理解给出的解决方案。如果有人能够简单地解释如何摆脱这个错误,我会很感激。

我在我的应用程序中使用了ActionBarSherlock。我的基本主题,Theme.Sherlock.Light,适用于所有活动。对于一项活动,我希望我的活动看起来像一个对话框,因此我想使用Theme.Sherlock.Dialog

这是我的清单文件的声明。

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

但我在我的XML中得到以下错误:error: Error: No resource found that matches the given name (at 'theme' with value '@style/Theme.Sherlock.Dialog').。我为什么得到这个?我应该怎么做,去除这个?

回答

29

JakeWharton在4个月前删除了ActionBarSherlock中的对话框主题。

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

只需使用@android:style/Theme.Dialog和扩展Activity,而不是SherlockActivity。 ActionBarSherlock不会为对话做任何事情,如果您的主题不使用,它只会抱怨。

+0

哦.. Okie ..会看到 –

+2

这是一个遗憾。我们的基类在我们的应用程序中提供了很多功能,它们从RoboSherlockFragmentActivity继承。我想很多应用程序都是这样组织的。这将导致基类的代码重复数据删除,这是一个相当可怕的模式。 – Snicolas

+0

@Snicolas,你绝对是对的 – Sviatoslav

0

ABS没有Theme.Sherlock.Dialog的样式。

您可能希望这样的活动延长口味Dialog之一,例如:

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

Theme.Sherlock.Dialog不再被支持。我使用以下方法在DialogFragment中设置对话框样式。你可以检查我的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

你能发布的不仅仅是你的代码吗?也许是对它做什么的描述(无论是在评论还是分开)? – bjb568

相关问题