Search code examples
androidandroid-layoutsizeandroid-custom-viewandroid-dialog

How to maintain params/proportions while changing content on android Dialog


Ok so I have been struggling with android dialogs and here is what I am trying to do. I have a custom xml layout for the dialog I want to show and I need to change that layout when an event triggers. The problem here is that whenever I want to change any view within the dialog's layout, the window wraps up every time and I cant seem to be able to maintain its params...

Here is how I create the dialog:

final Dialog dialog = new Dialog(getActivity());
                        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                        dialog.setContentView(R.layout.dialog_game_details);
                        dialog.setCancelable(false);
                        dialog.show();
                        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                        dialog.getWindow().setGravity(Gravity.TOP);     

How I access the main layout elements to add/remove views:

final LinearLayout ll_dialog_root_view = (LinearLayout) dialog.findViewById(R.id.ll_dialog_game_root_view);
            final LinearLayout ll_dialog_container_view = (LinearLayout) dialog.findViewById(R.id.ll_dialog_game_body_container);

And the xml layout file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll_dialog_game_root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/transparent"
    android:paddingLeft="11dp"
    android:paddingRight="11dp"
    android:paddingTop="32.5dp"
    android:paddingBottom="20dp"
    android:orientation="vertical" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:background="@drawable/border_bottom_1_5dp_grey"
        android:layout_height="wrap_content">
        <LinearLayout
            android:id="@+id/ll_dialog_game_title_bar"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:paddingLeft="11dp"
            android:paddingRight="11dp"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="@dimen/dialog_cont_title_margin_top"
            android:background="@color/gray">

            <ImageView 
                android:id="@+id/iv_dialog_game_close"
                android:layout_width="12dp"
                android:layout_height="22dp"
                android:layout_marginRight="7dp"
                android:layout_gravity="center_vertical"
                android:src="@drawable/ico_arrow_back" />

            <TextView 
                android:id="@+id/tv_dialog_game_title"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:textColor="@color/white"
                android:text="title"
                android:textSize="21dp"
                android:ellipsize="end"
                android:singleLine="true" />
        </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/ll_dialog_game_body_container"
                android:orientation="vertical">
            <ScrollView 
                android:id="@+id/sv_dialog_game_description"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="21.5dp"
                android:layout_marginRight="21.5dp"
                android:layout_marginBottom="14.5dp"
                android:requiresFadingEdge="vertical"
                android:fillViewport="true"
                >
                <TextView 
                    android:id="@+id/tv_dialog_game_description"
                    android:text="..."
                    android:textSize="14dp"
                    android:textColor="@color/black"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

            </ScrollView>

            <TextView  
                android:id="@+id/tv_dialog_game_info"
                android:layout_marginLeft="21.5dp"
                android:layout_marginRight="21.5dp"
                android:text="param: value"
                android:textSize="13dp"
                android:lineSpacingExtra="2dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <RelativeLayout 
                android:layout_width="match_parent"
                android:layout_marginRight="@dimen/dialog_cont_title_margin_top"
                android:layout_marginLeft="@dimen/dialog_cont_title_margin_top"
                android:layout_marginTop="32dp"
                android:layout_height="40dp"
                android:layout_marginBottom="@dimen/dialog_cont_title_margin_top"
                android:orientation="horizontal"
                >
                <ImageView 
                    android:id="@+id/iv_dialog_game_share"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentBottom="true"
                    android:padding="6dp"
                    android:background="@color/bt_share_default"
                    android:src="@drawable/ico_white_social_share"/>
                <LinearLayout
                    android:id="@+id/ll_dialog_game_start"
                    android:layout_alignParentRight="true"
                    android:layout_width="170dp" 
                    android:layout_height="40dp"
                    android:paddingRight="14dp"
                    android:background="@color/bt_catalog_show_more_categories"
                    >
                    <ImageView 
                        android:layout_width="32dp"
                        android:layout_height="32dp"
                        android:layout_gravity="center_vertical"
                        android:src="@drawable/ico_white_av_play"
                        android:layout_marginRight="11.5dp"
                        android:layout_marginLeft="11.5dp"
                        />
                        <!-- android:src="@drawable/ico_white_av_play"  -->
                    <TextView 
                        android:layout_width="wrap_content"
                        android:gravity="center_vertical"
                        android:textColor="@color/white"
                        android:layout_height="match_parent"
                        android:textSize="20dp"
                        android:text="¡Jugar!"/>
                </LinearLayout> 

            </RelativeLayout>


        </LinearLayout>

            <ProgressBar
                android:id="@+id/pb_dialog_game_loading"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal" />

            <TextView
                android:id="@+id/tv_dialog_game_loading"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:text="..."
                android:textColor="@color/black"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/tv_dialog_game_countdown"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:text="Countdown TextView"
                android:textColor="@color/black"
                android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

</LinearLayout>

Solution

  • A bit of a left-field suggestion, but have you considered using a PopupWindow instead of a dialog? It might suit your purposes. Essentially you can set it to a specific size and then change the content it displays as required. See Android doc - Popupwindow