我正在使用以下内容创建“警报”对话框:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
使用Android 3.0,警报对话框会继承创建它们的活动的主题。您可以通过以下方式创建警告对话框来覆盖此操作:
AlertDialog.Builder builder = new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK);
(更多关于 here )
不幸的是,这个强制关闭了先前版本的Android。我假设使用反射是答案,但无论我阅读多少,我都无法弄清楚语法。任何人都可以提供一个例子吗?
答案 0 :(得分:6)
我认为使用反射是答案,但无论我阅读多少,我都无法弄清楚语法。
你也许可以使用反射。我不愿意。
我会选择HoneycombHelper
。
This sample project还有一种情况需要为3.0做不同的事情 - 在这种情况下,在操作栏中使用自定义View
。您无法在3.0之前的getActionView()
上致电MenuItem
。
所以,在我需要自定义View
的地方,我这样做:
EditText add=null;
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) {
View v=HoneycombHelper.getAddActionView(menu);
if (v!=null) {
add=(EditText)v.findViewById(R.id.title);
}
}
if (add!=null) {
add.setOnEditorActionListener(onSearch);
}
在这里,我将getActionView()
调用隐藏在HoneycombHelper
类的静态方法中:
class HoneycombHelper {
static View getAddActionView(Menu menu) {
return(menu.findItem(R.id.add).getActionView());
}
}
我只在3.0或更高版本上加载HoneycombHelper
,因此即使它包含对旧版Android的无效方法调用,也不是问题。
在您的情况下,您的HoneycombHelper
会使用API级别11构造函数的gimmeMyBuilderDammit()
方法或类似方法。