web-dev-qa-db-fra.com

Android La fenêtre contextuelle ne remplit pas la taille de l'écran?

J'essaie de faire une simple fenêtre pop-up. Mais chaque fois que j'en fabrique un, il finit par être super petit ... et pas la longueur que je veux. Voici à quoi ressemble la fenêtre pop-up: enter image description here

Voici ma mise en page pour le pop up:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/popup_element"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="#444444"
    Android:padding="10px"
    Android:orientation="vertical">

    <TextView
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:text="Transfering data"
        Android:textColor="@color/white"/>

    <TextView
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center_vertical"
        Android:text="Status"
        Android:textColor="@color/white"/>

    <TextView Android:id="@+id/server_status_text"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Awaiting answer..."
        Android:paddingLeft="10sp"
        Android:textColor="@color/white"/>

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:orientation="horizontal"
        Android:gravity="center_horizontal|bottom">

        <Button Android:id="@+id/end_data_send_button"
            Android:layout_width="100dp"
            Android:layout_height="100dp"
            Android:drawablePadding="3sp"
            Android:layout_centerHorizontal="true"
            Android:text="Cancel" />
    </LinearLayout>
</LinearLayout>

Voici mon Java:

private PopupWindow pw;
        private void bindActivity() {

            fabButton = (ImageButton) findViewById(R.id.activity_profileView_FAB);
            fabButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    initiatePopupWindow();
                }
            });


        }
     private void initiatePopupWindow() {
            try {
                //We need to get the instance of the LayoutInflater, use the context of this activity
                LayoutInflater inflater = (LayoutInflater) ProfileView.this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                //Inflate the view from a predefined XML layout
                View layout = inflater.inflate(R.layout.popup,
                        (ViewGroup) findViewById(R.id.popup_element));
                // create a 300px width and 470px height PopupWindow
                pw = new PopupWindow(layout, 300, 470, true);
                // display the popup in the center
                pw.showAtLocation(layout, Gravity.CENTER, 0, 0);

                TextView mResultText = (TextView) layout.findViewById(R.id.server_status_text);
                Button cancelButton = (Button) layout.findViewById(R.id.end_data_send_button);
                cancelButton.setOnClickListener(cancel_button_click_listener);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        private View.OnClickListener cancel_button_click_listener = new View.OnClickListener() {
            public void onClick(View v) {
                pw.dismiss();
            }
        };

Impossible de comprendre pourquoi cela ne fonctionne pas ... Comment pourrais-je obtenir la taille que je veux?

15
TheQ

Ici, vous ne pouvez pas utiliser la mise en page qui se trouve dans votre fenêtre popup xml. Vous devez utiliser n'importe quelle vue de la disposition principale. En ce moment, j'utilise FloatingButton en tant que vue pour showAtLocation.

fabButton = (ImageButton) findViewById(R.id.activity_profileView_FAB);
            fabButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(final View v) {
                    initiatePopupWindow(v);
                }
            });

 private void initiatePopupWindow(View v) {
            try {
                //We need to get the instance of the LayoutInflater, use the context of this activity
                LayoutInflater inflater = (LayoutInflater) ProfileView.this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                //Inflate the view from a predefined XML layout
                View layout = inflater.inflate(R.layout.popup,
                        (ViewGroup) findViewById(R.id.popup_element));
                // create a 300px width and 470px height PopupWindow
                pw = new PopupWindow(layout, 300, 470, true);
                // display the popup in the center
                pw.showAtLocation(v, Gravity.CENTER, 0, 0);

                TextView mResultText = (TextView) layout.findViewById(R.id.server_status_text);
                Button cancelButton = (Button) layout.findViewById(R.id.end_data_send_button);
                cancelButton.setOnClickListener(cancel_button_click_listener);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
11
Naveen Kumar M

Il suffit de changer

 pw = new PopupWindow(layout, 300, 470, true);

aimer ça

pw = new PopupWindow(layout, LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT, true);

et si vous avez besoin de marges de n’importe quel côté, faites-le dans un fichier XML contextuel. Également en XML, utilisez Android: layout_height = "wrap_content". L'avantage de ceci est, - il aura le même aspect (si vous mettez une marge) dans n'importe quel écran de périphérique.

5
Exigente05