如何使用AlertDialog.Builder进行反射?

时间:2011-03-17 22:42:27

标签: android

我正在使用以下内容创建“警报”对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(context);

使用Android 3.0,警报对话框会继承创建它们的活动的主题。您可以通过以下方式创建警告对话框来覆盖此操作:

AlertDialog.Builder builder = new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK);

(更多关于 here

不幸的是,这个强制关闭了先前版本的Android。我假设使用反射是答案,但无论我阅读多少,我都无法弄清楚语法。任何人都可以提供一个例子吗?

1 个答案:

答案 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()方法或类似方法。