今天做项目用到了Dialog要全屏显示,网上查了些资料写的都不是很全面,我自己也试验了很多次后才得到完美的解决方案。
先是dialog style 这里一般写会指定他的父样式,但是如果你要全屏显示的话就不要继承父样式,否则会没有效果的。
<style name="FullScreenDialog">//这里千万不要写parent 否则会被父样式效果代替的
<item name="android:windowIsFloating">true</item>//浮层在activity上 这项很重要
<item name="android:windowIsTranslucent">true</item>//设置显示半透明蒙层
<item name="android:windowBackground">@android:color/transparent</item>//背景透明
<item name="android:windowAnimationStyle">@style/DialogAnim</item>//dialog显示和关闭动画
</style>
然后是创建dialog 我是直接写个类继承dialog重写父类方法 这样直接自定义一个dialog 方便activity调用 其他地方重用也很方便
public class SoccerFilterDialog extends Dialog {
public SoccerFilterDialog(Context context) {
super(context, R.style.FullScreenDialog);//这里调用我写好的样式
}
public void initView() {
setCanceledOnTouchOutside(true);
View viewRoot = getLayoutInflater().inflate(R.layout.view_dialog_soccerfilter, null);
setContentView(viewRoot);
getWindow().setGravity(Gravity.BOTTOM);//靠底部显示
getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);//设置dialog的宽度和高度 我设的宽度是填充父窗口,高度内容包裹
}
}
然后是调用弹框显示了
public class MainActivity extends BaseActivity {
private SoccerFilterDialog filterDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_soccermain);
filterDialog = new SoccerFilterDialog(this);//创建
filterDialog.initView();//初始化view
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
filterDialog.show();//显示
}
});
}
}
在模拟器和真机上都测试显示效果都很完美,真机m2分辨率 720*1280 模拟器分辨率480*800
效果图:
查资料的时候发现activity改style也可以做成弹框的样式,支付宝快捷支付就这样浮层的activity 。唉发现style太强大了 我了解的太少了,如果有哪位大神路过 能否告知activity做成弹框那种的样式 很想知道是怎样实现的 style是怎么定义的 ~!