web-dev-qa-db-ja.com

Androidポップアップウィンドウが画面サイズを満たさない?

シンプルなポップアップウィンドウを作成しようとしています。しかし、私が作るたびに、それは非常に小さくなります...そして、私が望んでいる長さではありません。これは、ポップアップの外観です。 enter image description here

ポップアップのレイアウトは次のとおりです。

<?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>

ここに私の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();
            }
        };

なぜ機能しないのかを突き止めてください...希望のサイズを取得するにはどうすればよいですか?

15
TheQ

ここでは、ポップアップウィンドウxmlにあるレイアウトを使用できません。メインレイアウトから任意のビューを使用する必要があります。現在、FloatingButtonを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

ただ変える

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

これが好き

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

いずれかの側にマージンが必要な場合は、ポップアップxmlファイルでそれを行います。また、xmlでAndroid:layout_height = "wrap_content"を使用します。この利点は、どのデバイス画面でも同じように見えます(マージンを入れた場合)。

5
Exigente05