今天要作點擊一個按鈕,點擊彈出下拉對話框,這個對話框樣子就跟html的dropdown list同樣,蓋在原佈局上面。原本是想用menu作,可是因爲這個按鈕只是整個界面中很小的一個,不固定,用menu還要從新搞整個大布局,自定義menu佈局還要先研究,太麻煩,最後仍是決定用dialog。html
第一個遇到問題的是dialog的顯示位置問題。這裏是個人部分解決代碼:java
在調用dialog的地方:android
Button button=(Button)layout.findViewById(R.id.bt_dropdown_selector); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Window dialogWindow = dropdownListDialog.getWindow(); dialogWindow.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); int[] position=new int[2]; v.getLocationOnScreen(position); lp.x = position[0]; // 新位置X座標 lp.y = position[1]; // 新位置Y座標 lp.gravity= Gravity.LEFT|Gravity.TOP; dialogWindow.setAttributes(lp); dropdownListDialog.onWindowAttributesChanged(lp); dropdownListDialog.setCanceledOnTouchOutside(true); dropdownListDialog.show(); } });
這裏的座標只是先跟按鈕的左下角對齊了,也沒有居中,也沒有判斷dialog有沒有超過屏幕,等後面繼續完善吧。ide
style.xml裏是這樣的,項目是支持android4.0以上,還用了supportv4,因此是有這個parent theme的。佈局
<!-- 下拉選擇對話框樣式 --> <style name="DropdownDialogTheme" parent="@android:style/Theme.Holo.DialogWhenLarge"> <item name="android:windowNoTitle">true</item> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:background">@android:color/white</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:backgroundDimEnabled">false</item> </style>