2013-05-11 59 views
4

我想在我的应用程序中使用弹出式菜单,它应该与Android 1.6+兼容。因此,我使用此代码(取自Supporting Different Platform Versions)区分预蜂窝(没有PopupMenu)和蜂窝+显示无论是PopupMenu的或AlertDialog:Android PopupMenu“找不到类android.widget.PopupMenu'

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    PopupMenu popup = new PopupMenu(this, v); 
    ... 
} else { 
    showDialog(DIALOG_ID); 
} 

此正常工作与仿真的Android 2.1(表示AlertDialog),2.3.3(表示AlertDialog)和4.2。 2(显示PopupMenu),但它不适用于模拟的Android 1.6。我收到以下错误消息:

E/dalvikvm(211): Could not find class 'android.widget.PopupMenu', referenced from method ... 
W/dalvikvm(211): VFY: unable to resolve new-instance 50 (Landroid/widget/PopupMenu;) in L...; 
W/dalvikvm(211): VFY: rejecting opcode 0x22 at 0x0006 
W/dalvikvm(211): VFY: rejected L...;.... (Landroid/view/View;)V 
W/dalvikvm(211): Verifier rejected class L...; 
W/dalvikvm(211): Class init failed in newInstance call (L...;) 

为什么Android 2.x会像预期的那样运行,但Android 1.6不会?

+0

为什么不使用警报对话框?与控制API版本 if(android.os.Build.VERSION.RELEASE.startsWith(“1。”)) 。 。 。 (“2.0”)|| android.os.Build.VERSION.RELEASE.startsWith(“2.1”)) 。 。 – 2013-05-11 11:24:13

+0

1.6不支持弹出菜单..bcoz它被添加到Api级别11 .. – Sam 2013-05-11 11:28:27

+0

@Sam这就是为什么我显示AlertDialog,如果API级别低于11 ... – floppes 2013-05-11 13:12:30

回答

4

看看这个类的文档:http://developer.android.com/reference/android/widget/PopupMenu.html 它已经在API层面增加了11
1.6为您的应用实际需求?它现在几乎不存在。

有两种解决方法:
- 使用DialogFragment代替
- 创建基于PopupWindow(如DOC http://developer.android.com/training/backward-compatible-ui/older-implementation.html建议)自己的实现

我会建议重新考虑其1.6的最低目标,如果你没有真正的理由这样做,它会产生更多的麻烦,而它的价值仅仅是安装基数的0.1%。在任何情况下,DialogFragment都是这种UI元素的一种方式,它是兼容性库的一部分(因此它与旧版Android兼容)。