先看下效果:
1,实现这个dialog其实最主要的是Window的设置和dialog的主题设置,list是由resycleView实现的,下面直接上代码:
private void initWindow() {
View contentView = View.inflate(mContext, R.layout.layout_promotion_mapview_filter, null);
setCanceledOnTouchOutside(true);
setContentView(contentView);<span style="white-space:pre"> </span>//设置布局
Window dialogWindow = getWindow();
dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
dialogWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
dialogWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics dm = new DisplayMetrics();
dialogWindow.getWindowManager().getDefaultDisplay().getMetrics(dm);
lp.width = dm.widthPixels;<span style="white-space:pre"> </span>//宽充满屏幕
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; //高度自适应,根据我显示的list高度
lp.gravity = Gravity.BOTTOM; //显示在界面的下方
dialogWindow.setAttributes(lp);
// Animation
// dialogWindow.setWindowAnimations(R.style.main_menu_animstyle);
}
2,启动的时候,可以传入相应的主题theme,theme决定了你dialog的显示样式,先上theme的代码:
<style name="filter_style" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
3,启动的时候需要传入:
new PromotionMapViewFilter(getActivity(), R.style.filter_style);
4,构造函数里面就可以实现初始化了:
public PromotionMapViewFilter(Context context, int themeResId){
super(context, themeResId);
requestWindowFeature(Window.FEATURE_NO_TITLE);
.....
this.show(); //一定注意这里,show要在initWindow之前执行,否则会报错!
initWindow();<span style="white-space:pre"> </span>//代码在文章一开始
}
以上