今天要作点击一个按钮,点击弹出下拉对话框,这个对话框样子就跟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>