Android全屏弹出另一个页面需求实现

解决的问题、实现的功能:

页面传值、dialog全屏显示、全屏打开另一个页面、点击页面或弹层消失、长按页面或弹层底部弹出操作页面、关闭全屏页或弹层、extend DialogFragment和BottomSheetDialogFragment、BackgroundDrawable的使用、xml和java关联

场景:当前页按钮点击需要在当前页全屏显示另一个页面,点击显示页显示页消失,当前页通过以下代码调用另一个界面

Bundle args = new Bundle();
args.putParcelable("GoodsInfoBean", goodsInfoBean);//传数据
haibaoFragment.setArguments(args);//haibaoFragment为被调用界面所在的java文件
haibaoFragment.show(getFragmentManager(),"haibaoFragment");//被调用界面显示

当然你也可以用弹出dialog的方式,附上代码吧,也是全屏显示的啊

View sub = getActivity().getLayoutInflater().inflate(R.layout.share_haibao, null);
final AlertDialog mDialog = new AlertDialog.Builder(getContext()).create();
//mDialog.setCancelable(true);// 外部点击取消
mDialog.show();// 显示创建的AlertDialog,并显示,必须放在Window设置属性之前
Window window = mDialog.getWindow();
if (window != null) {
    window.setContentView(sub);//这一步必须指定,否则不出现弹窗
    WindowManager.LayoutParams mParams = window.getAttributes();
    mParams.width = WindowManager.LayoutParams.MATCH_PARENT;
    mParams.height = WindowManager.LayoutParams.MATCH_PARENT;
    window.setGravity(Gravity.CENTER); // 此处可以设置dialog显示的位置
    window.setBackgroundDrawableResource(android.R.color.white);
    window.setWindowAnimations(R.style.AnimFade);
    window.setAttributes(mParams);
}
sub.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        mDialog.dismiss();
    }
});

这样弹层界面处理就需要在当前java中实现了,就不能在比如说这里的haibaoFragment里面实现了
言归正传,看下haibaoFragment.java改怎么写

public class HaibaoFragment extends DialogFragment {}

主要是extends,可以是DialogFragment也可以是BottomSheetDialogFragment,应该不难理解,说一下BottomSheetDialogFragment默认不能全屏显示,当然DialogFragment也不能全屏显示,不过有方法让他全屏显示,但是我试了BottomSheetDialogFragment没成功,可能是我这边的原因,如果你也不能成功的话就像我一样用DialogFragment吧,顺带附上DialogFragment全屏显示的方法(这里我遇到了点小问题,后面onCreate方法里面会备注)

 public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            Window window = dialog.getWindow();
            window.setBackgroundDrawable( new ColorDrawable( 0x64ffffff ) );/*0x是固定的64表示透明度,采用的是十进制转十六进制,这里是100表示完全不透明,在后面的就是颜色值了*/
            DisplayMetrics dm = new DisplayMetrics();
            getActivity().getWindowManager().getDefaultDisplay().getMetrics( dm );
            window.setLayout( dm.widthPixels, getDialog().getWindow().getAttributes().height);
        }

    }

继续回到场景上,此时DialogFragment打开了,但我这里是全屏打开怎么关闭打开内容呢,所以就是当用户点击全屏页面,全屏页消失,即DialogFragment消失,当时百度了一个方法是这样的:

view.setVisibility(View.GONE);//mlistview1处于隐藏状态,主要是这句话,后面的是因为没用又加的但还是没用
 AbsListView.LayoutParams param = new AbsListView.LayoutParams(
          //设置item的weidth和height都为0
          0,
          0);
  //将设置好的布局属性应用到GridView的Item上
  view.setLayoutParams(param);

也不是没有用,而是存在问题,蒙层并没有消失,而且中间还留了点空白页,应该是场景不合适,后来继续研究,终于找到了合适的,一句话解决

getDialog().dismiss();

因为是菜鸟,详细点吧,附上整体代码吧

public class HaibaoFragment extends DialogFragment {
    //变量也在这里声明
   @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.share_haibao, container, false);//指明此Java是和哪个页面对应的
        //去掉标题栏,全屏dialog的时候头部有一灰色区域后来多次测试发现是标题栏
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getDialog().dismiss();
            }
        });
        return view;
    }
}

因为最近刚开始写Android之前是做web的,三年前学习过java和Android,不懂的太多所以写的比较细,可能也比较乱

猜你喜欢

转载自blog.csdn.net/qq_37291064/article/details/89400431