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

wir*_*bly 4 android

我正在使用以下内容创建一个Alert对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(context);
Run Code Online (Sandbox Code Playgroud)

在Android 3.0中,警报对话框继承了创建它们的活动的主题.您可以通过使用以下方法创建警报对话框来覆盖此操作:

AlertDialog.Builder builder = new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK);
Run Code Online (Sandbox Code Playgroud)

(更多关于此处)

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

Com*_*are 6

我假设使用反射是答案,但无论我阅读多少,我都无法弄清楚语法.

你也许可以使用反射.我不会.

我会去的HoneycombHelper.

此示例项目还有一种情况,它需要为3.0执行不同的操作 - 在这种情况下,View在操作栏中使用自定义.你不能getActionView()MenuItem3.0之前打电话.

所以,在我需要自定义的地方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);
    }
Run Code Online (Sandbox Code Playgroud)

在这里,我将getActionView()调用埋在一个HoneycombHelper类的静态方法中:

class HoneycombHelper {
    static View getAddActionView(Menu menu) {
        return(menu.findItem(R.id.add).getActionView());
    }
}
Run Code Online (Sandbox Code Playgroud)

我只加载HoneycombHelper3.0或更高版本,所以即使它包含旧版Android的无效方法调用,也不是问题.

在您的情况下,您HoneycombHelper将拥有gimmeMyBuilderDammit()使用API​​ Level 11构造函数的方法或类似方法.