Android Dialog方式弹出蒙版

该博客介绍了如何使用Dialog方式在Android中实现点击蒙版消失及返回键关闭的效果,对比了WindowManager方式的优点,提供了ShowDialogUtils工具类的代码示例,并详细展示了相关资源文件的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:点击蒙版,蒙版消失,点击back键(返回键),蒙版也消失

优点: 相对于WindowManager方式添加蒙版,返回键具有点击效果,不会卡顿,安卓机型适配更通用

以下是ShowDialogUtils代码

import android.app.Activity;
import android.app.Dialog;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

import com.idroid.R;

import java.lang.ref.WeakReference;

/**
* @author
* @time
* @desc Dialog方式显示蒙版
*/

public class ShowDialogUtils implements View.OnClickListener {
private Dialog mDialog;
private WeakReference mWeakReference;
private ImageView mViewById;

public ShowDialogUtils(Activity act){
    mWeakReference=new WeakReference(act);
    initView(act);

}

private void initView(Activity act) {
    mDialog = new Dialog(mWeakReference.get(), R.style.dialog);
    mDialog.setContentView(R.layout.show_dialog);
    mViewById = (ImageView) mDialog.findViewById(R.id.iv);
    mViewById.setScaleType(ImageView.ScaleType.FIT_XY);
    mViewById.setOnClickListener(this);

    //给窗体设置大小
    Window win = mDialog.getWindow();
    win.getDecorView().setPadding(0, 0, 0, 0);
    WindowManager.LayoutParams lp = win.getAttributes();

//设置宽高在as中没有作用,在Eclipse中要设置才能填充屏幕

// lp.width=ScreenUtils.getScreenWidth(act);

// lp.height = ScreenUtils.getScreenHeight(act);
win.setAttributes(lp);

}

public void show(int id){
    if(null != mDialog && !mDialog.isShowing()){
        mViewById.setImageResource(id);
        mDialog.show();
    }
}

public void dismiss(){
    if(null != mDialog && mDialog.isShowing()){
        mDialog.dismiss();
    }
}

@Override
public void onClick(View v) {
    dismiss();
}

}

资源文件dialog代码

<!-- 蒙版dialog样式 -->
<style name="dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@color/transparent</item>
</style>

布局文件show_dialog代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="@android:color/transparent">


<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

资源文件color代码

<color name="transparent">#00000000</color>

在Activity或Fragment调用代码

        ShowDialogUtils showDialog = new ShowDialogUtils(this);
        showDialog.show(R.drawable.homeguide);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值