ConstraintLayout 作为DialogFragment根布局时的问题-程序员宅基地

技术标签: android  DialogFragment  ConstraintLayout  

constraintLayout 作为DialogFragment 跟布局展示失效的问题

先来一个对比图

想要这个样子的
在这里插入图片描述
结果 是这个样子的
在这里插入图片描述

布局我是这样写的
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

   <ImageView
       android:id="@+id/iv_ad_show"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:scaleType="centerCrop"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintHeight_percent="0.5"
       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"
       app:layout_constraintTop_toTopOf="parent"
       app:layout_constraintVertical_bias="0.4"
       app:layout_constraintWidth_percent="0.65" />

   <ImageView
       android:id="@+id/cancel"
       android:layout_width="0dp"
       android:layout_height="0dp"
       android:src="@mipmap/ic_launcher"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintDimensionRatio="1"
       app:layout_constraintLeft_toLeftOf="@id/iv_ad_show"
       app:layout_constraintRight_toRightOf="@id/iv_ad_show"
       app:layout_constraintTop_toBottomOf="@id/iv_ad_show"
       app:layout_constraintVertical_bias="0.2"
       app:layout_constraintWidth_percent="0.1" />

</androidx.constraintlayout.widget.ConstraintLayout>

最开始 DialogFragment 是这样写的:

package com.rth.commonlibrary.view.dialog

import android.app.Dialog
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.support.v4.app.DialogFragment
import android.support.v4.app.Fragment
import android.support.v7.app.AppCompatActivity
import android.view.*
import com.bumptech.glide.Glide
import com.rth.commonlibrary.R
import kotlinx.android.synthetic.main.layout_advert_dialog.view.*


/**
 * 首页弹出广告显示
 * @author WangHongBin ^_^
 * @date 2020/5/11 16:14
 **/
class AdvertDialogFragment constructor() : DialogFragment() {
    

    internal lateinit var dialog: Dialog

    private var callBack: (() -> Unit)? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    
        val viewDialog: View = inflater.inflate(R.layout.layout_advert_dialog, container, false)
        dialog = getDialog()
        dialog.window.requestFeature(Window.FEATURE_NO_TITLE)
        dialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        dialog.setCancelable(false)
        dialog.setCanceledOnTouchOutside(false)


        val adUrl: String = arguments!!["ad"] as String

        Glide.with(activity!!).load(adUrl).into(viewDialog.iv_ad_show)

        viewDialog.iv_ad_show.setOnClickListener {
    
            dismiss()
            callBack!!()
        }

        viewDialog.cancel.setOnClickListener {
    
            dismiss()
        }

        return viewDialog
    }

    /**
     * 点击事件回调
     */
    fun setOnClickListener(callback: () -> Unit) {
    
        this.callBack = callback
    }
    
    companion object {
    
        fun newInstance(context: AppCompatActivity, url: String): AdvertDialogFragment? {
    
            val tag = AdvertDialogFragment::class.java.name
            var fragment = context.supportFragmentManager.findFragmentByTag(tag)
            return if (fragment == null) {
    
                fragment = Fragment.instantiate(context, tag)
                val bundle = Bundle()
                bundle.putString("ad", url)
                fragment.arguments = bundle
                fragment as AdvertDialogFragment
            } else {
    
                val bundle = Bundle()
                bundle.putString("ad", url)
                fragment.arguments = bundle
                fragment as AdvertDialogFragment
            }
        }
    }
}

本来我觉的没啥问题呢,但是跑起来发现 弹窗不显示,只是有透明的感觉。当时蒙蔽了。
后来细想,应该是宽高的问题。所以后来又重新计算了宽高,加入这样的代码:

	override fun onStart() {
    
        super.onStart()
        //重新计算视图宽高  充满屏幕
        val win = getDialog().window
        // 一定要设置Background,如果不设置,window属性设置无效
        win.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        win.attributes.apply {
    
            gravity = Gravity.CENTER
            width = ViewGroup.LayoutParams.MATCH_PARENT
            height = ViewGroup.LayoutParams.MATCH_PARENT
        }.let {
    
            win.attributes = it
        }
    }

这样重新计算宽高,让整体视图充满屏幕,然后constraintlayout再按宽高比例计算,就可以正常显示了

如果对您有用,欢迎点赞!!

不足之处,欢迎大佬指教!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sexy_99/article/details/106077838

智能推荐

poj1036 Gangsters-程序员宅基地

文章浏览阅读2.6k次。题意:N个歹徒去一个餐馆,旅馆门有k个打开程度(每个打开程度为门的一个状态),每个歹徒拥有自己的肥胖度(两个歹徒的肥胖度可能相同)和繁荣度(prosperity),歹徒在i 时刻到餐厅来(两个歹徒可能同时来餐馆),若此时刻门的打开程度与歹徒的肥胖度相同,则歹徒就进入餐馆,同时餐馆_poj1036

VMware-ubuntu 之如何时间同步_vmware时间设置-程序员宅基地

文章浏览阅读1.2k次。可以选“自动设置时区”或者是点“时区”手动选择所在时区。环境:VMware+Ubuntu18.04。(1)VMware菜单--虚拟机--设置。(2)Ubuntu程序--设置。_vmware时间设置

关于报表在移动端展现你需要知道哪些?_移动端代理商数据报表-程序员宅基地

文章浏览阅读323次。在各企业中或者电商平台的商家,业务方,每天都有大量的人需要在线查看大量的指标,用于监控、分析关键业务数据的发展趋势。同时,又有着能够随时随地,方便快捷的查看分析数据的诉求。我们习惯于,使用润乾报表在 PC 端或大屏中展现,但是你知道吗?润乾报表 V2018 是以 HTML5 方式输出,不仅支持在 PC 端展现,也支持在手机端展现,并且在手机端展现时可以在手机端自适应。手机报表已有功能目..._移动端代理商数据报表

python压缩算法_使用Python(lzma)使用LZMA算法进行压缩-程序员宅基地

文章浏览阅读2k次。Lempel-谢夫马尔可夫链算法使用设有比其它压缩算法更高的压缩比的字典压缩方案(LZMA)执行无损数据压缩。Python的lzma模块由用于通过LZMA算法压缩和解压缩数据的类和便利函数组成。尽管此模块中的功能类似于bz2模块,但是与BZ2File类相比,LZMAFile类不是线程安全的。同样,open()lzma模块中的函数是打开lzma压缩文件对象的最简单方法。打开()此函数将打开LZMA压..._lzma压缩算法

Z-XML团队 软件工程课之我感我思我收获-程序员宅基地

文章浏览阅读97次。《软件工程》这门课像我们的诤友,不断督促我们前进,又不断指引我们收获。时间飞逝,我们Z-XML团队一个个完成了课程中的所有任务,一步步走到了期末年末。走的远了,也该回头看看。全员7人回顾于此:李孟 一个学期的软件工程即将落下帷幕,在这样一个历程中,我收获很多,也感受到很多。 这是一门与实践结合极其紧密的课,而对于这样的课,总是让我感到兴奋。因为我们确实是在做中学,在学中做。...

小班计算机游戏教案,小班游戏教案10篇-程序员宅基地

文章浏览阅读383次。这是小班游戏教案10篇,是优秀的小班游戏教案文章,供老师家长们参考学习。第1篇、小班民间游戏丢手绢教案反思目标:1、发展幼儿快速奔跑的基本动作。2、有利于孩子应变能力的发展,身体的灵活性及培养幼儿敏锐的观察能力。材料:小手绢一块,宽阔平坦的活动场地。玩法:1、参加游戏的幼儿坐成一个大圆圈,大家边拍手边唱歌。2、一个幼儿拿手绢绕圆圈转,并轻轻地把手绢放在任意一个幼儿的身后。3、转一圈,如果哪个幼儿还..._小班电脑室活动教案

随便推点

基于ssm工单管理系统的设计与实现(源码+lw+部署文档+讲解等)-程序员宅基地

文章浏览阅读303次,点赞5次,收藏4次。功能对照表的目的是帮助开发团队了解软件的功能状况,及时修复功能缺陷和错误,并提高软件的质量和稳定性。功能编号功能名称功能描述功能状态备注1用户登录用户可以通过提供用户名和密码登录系统正常用户名和密码的验证机制安全性2用户注册用户可以通过提供用户名、密码和电子邮件地址注册新的账户正常无3密码修改用户可以通过提供原密码和新密码修改已有账户的密码正常用户密码的修改操作是否需要提供安全认证4用户信息查看用户可以查看自己的个人信息,如用户名、电子邮件地址、角色等正常无。

为什么静态static成员函数不能成为virtual虚函数_静态函数(static)不能是虚函数-程序员宅基地

文章浏览阅读2.6k次,点赞12次,收藏38次。首先什么是static静态成员函数?静态成员函数不属于类中的任何一个对象和实例,属于类共有的一个函数。也就是说,它不能用this指针来访问,因为this指针指向的是每一个对象和实例。对于virtual虚函数,它的调用恰恰使用this指针。在有虚函数的类实例中,this指针调用vptr指针,指向的是vtable(虚函数列表),通过虚函数列表找到需要调用的虚函数的地址。总体来说虚函数的调用关系是:..._静态函数(static)不能是虚函数

【计算机毕业设计】030小学生课外知识学习网站-程序员宅基地

文章浏览阅读107次。互联网发展到如今也近20年之久,小学生课外知识学习网站一直作为互联网发展中的一个重要角色在不断更新进化。小学生课外知识学习网站从最初的文本显示到现在集文字、视频、音频与一体,成为一种网络多媒体浏览网站。作为一种媒体传输媒介,小学生课外知识学习网站如今也分各个类别,各种形式。本文着重对小学生课外知识学习网站进行分析和研究,浅析小学生课外知识学习网站的现状和存在的一些问题并对此进行研究,通过对问题和现状的分析研究和对用户需求的一个简单整理建模,设计并且实现一个小学生课外知识学习网站。小学生课外知识学习网站采

Golang zip压缩及加密_go zip-程序员宅基地

文章浏览阅读978次。Golang zip压缩及加密_go zip

第1章 Java基本概念及环境配置——FAQ1.02 面向对象程序设计的基本特征有哪些?...-程序员宅基地

文章浏览阅读117次。FAQ1.02 面向对象程序设计的基本特征有哪些?答: 1、概述: 面向对象程序设计的雏形,早在1960年的Simula语言中即可发现,当时的程序设计领域正面临着一种危机:在软硬环境逐渐复杂的情况下,软件如何得到良好的维护?面向对象设计在某种程度上强调可重复性解决了这一问题。20世纪70年代的Smalltalk语言在面向对象方面堪称经典——以至于30年后的今天依然将这语言视为面向对..._兼容性属于面向程序的特征吗

内核全新优化UI界面影视双端源码_全新ui风格影视网站源码-程序员宅基地

文章浏览阅读154次。简介:Thinkphp内核全新优化UI界面双端源码网盘下载地址:http://kekewangLuo.net/soNTf1nZ2ps0图片:_全新ui风格影视网站源码

推荐文章

热门文章

相关标签