当前位置: 首页 > 工具软件 > XY_Dialog > 使用案例 >

Android Dialog方式弹出蒙版

司徒宏远
2023-12-01

需求:点击蒙版,蒙版消失,点击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);
 类似资料: