2013-05-11 57 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兼容)。