今天要做点击一个按钮,点击弹出下拉对话框,这个对话框样子就跟html的dropdown list一样,盖在原布局上面。本来是想用menu做,但是由于这个按钮只是整个界面中很小的一个,不固定,用menu还要重新搞整个大布局,自定义menu布局还要先研究,太麻烦,最后还是决定用dialog。
第一个遇到问题的是dialog的显示位置问题。这里是我的部分解决代码:
在调用dialog的地方:
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有没有超过屏幕,等后面继续完善吧。
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>