Paulo Buchsbaum
Paulo Buchsbaum

Reputation: 2659

How programmatically make a custom dialog be 100% of screen height?

I have a relative layout that occupies 100% of the screen. I call many custom dialogs and always works well. I get positioning and correct height and width with no problems.

However, now I need a dialog that is 100% of screen height and 100% of screen width. I get 100% width but I don't get 100% height. The maximum is around 95 of height.

I've reduced my code to a minimum for better clarity:

  var lay = RelativeLayout(this)
  var dial = Dialog(cx)   
  val win = dial.window
  val wlp = win.attributes
  win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
  wlp.apply {
    gravity = Gravity.TOP or Gravity.LEFT
    x = 0
    y = 0
  }
  win.attributes = wlp

 // Here are my widgets linked to lay with lay.addView(widget).       

  dial.setContentView(   // Connection between layout and dialog
    lay, ViewGroup.LayoutParams(
     screen_width,       // variable with screen width in pixels
     screen_height ))      // variable with screen heigth in pixels

I've read many questions in Stackoverflow. What I have tried:

a) I've used MATCH_PARENT as height.

b) I've tried some windows flags:

 win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)   
 win.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)   

c) I've tried windows attribute property:

 wlp.verticalMargin = 0F 

No success.

PS: I also have a strange shade border at right and bottom side of dialog that I cannot get rid of it.

Update:

Rahul Khurana solution has killed the problem.

It just use

val dial = Dialog(cx,android.R.style.Theme_Black_NoTitleBar_Fullscreen)   

It also eliminates the shade in other no fullscreen dialogs

  val dial = Dialog(cx,
    android.R.style.Theme_DeviceDefault_Dialog_NoActionBar)

Upvotes: 0

Views: 299

Answers (4)

Rahul Khurana
Rahul Khurana

Reputation: 8834

Change the constructor like this:

val dialog=Dialog(this,android.R.style.Theme_Black_NoTitleBar_Fullscreen);

Upvotes: 2

Azay Gupta
Azay Gupta

Reputation: 311

    dialog?.window?.apply {
requestFeature(Window.FEATURE_NO_TITLE);  setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
                setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 
                ViewGroup.LayoutParams.MATCH_PARENT)
            }

Upvotes: 0

Ashish
Ashish

Reputation: 116

Use this snippet of code, it will work.

Activity activity = ...;
AlertDialog dialog = ...;
// retrieve display dimension
Rect displayRectangle = new Rect();
Window window = activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

// inflate layout
LayoutInflater inflater =    (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_layout, null);
layout.setMinimumWidth((int)(displayRectangle.width() * 0.95f));
layout.setMinimumHeight((int)(displayRectangle.height() * 0.95f));

dialog.setView(layout);

Upvotes: 0

Alireza Bideli
Alireza Bideli

Reputation: 874

Initialize and show your dialog as below in onStart

override fun onStart() {
        super.onStart()
        val dial = Dialog(this);

        var width = ViewGroup.LayoutParams.MATCH_PARENT;
        var height = ViewGroup.LayoutParams.MATCH_PARENT;
        dial.getWindow().setLayout(width, height);
         dial.show()

    }

Upvotes: 1

Related Questions