【AndroidのViewを制する】 PopupWindowを任意の位置に表示する

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

今回、紹介するPopupWindowは画面の任意の位置に好きなViewをポップアップすることができます。
メソッドがたくさんあるため数回に分割して説明します。
今回はPopupWindowを表示するものに関連するメソッドの使い方を説明します。

PopupWindow#showAsDropDown(View anchor)を使って表示する

PopupWindow#showAsDropDown(View anchor)はPopupWindowを引数で指定したViewの近くに表示することができます。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // showAsDropDown (View anchor)
    Button showPopupWindow1 = new Button(this);
    showPopupWindow1.setText("showAsDropDown (View anchor)を使って表示する");
    showPopupWindow1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.showAsDropDown(v);
        }
    });
    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(showPopupWindow1);
    linearLayout.addView(dismissPopupWindow);

    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(linearLayout);
    setContentView(frameLayout);


PopupWindow#showAsDropDown(View anchor, int xoff, int yoff)を使って表示する

PopupWindow#showAsDropDown(View anchor, int xoff, int yoff)はPopupWindowを引数で指定したViewの近くに表示することができます。
int xoffはPopupWindowをx軸方向に移動させます。正の値で右方向、負の値で左方向に移動します。
int yoffはPopupWindowをy軸方向に移動させます。正の値で下方向、負の値で上方向に移動します。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // showAsDropDown (View anchor, int xoff, int yoff)
    Button showPopupWindow2 = new Button(this);
    showPopupWindow2.setText("showAsDropDown (View anchor, int xoff, int yoff)を使って表示する");
    showPopupWindow2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.showAsDropDown(v,100,100);
        }
    });

    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(showPopupWindow2);
    linearLayout.addView(dismissPopupWindow);

    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(linearLayout);
    setContentView(frameLayout);


PopupWindow#showAsDropDown(View anchor, int xoff, int yoff, int gravity)を使って表示する

PopupWindow#showAsDropDown(View anchor, int xoff, int yoff)はPopupWindowを引数で指定したViewの近くに表示することができます。
int xoffはPopupWindowをx軸方向に移動させます。正の値で右方向、負の値で左方向に移動します。
int yoffはPopupWindowをy軸方向に移動させます。正の値で下方向、負の値で上方向に移動します。
int gravityはView anchorに対するPopupWindowの表示位置をGravityを使って設定することができます。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // showAsDropDown (View anchor, int xoff, int yoff, int gravity)
    Button showPopupWindow3 = new Button(this);
    showPopupWindow3.setText("showAsDropDown (View anchor, int xoff, int yoff, int gravity)を使って表示する");
    showPopupWindow3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.showAsDropDown(v,100,100, Gravity.RIGHT);
        }
    });

    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(showPopupWindow3);
    linearLayout.addView(dismissPopupWindow);

    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(linearLayout);
    setContentView(frameLayout);


PopupWindow#showAtLocation(View parent,int gravity, int x, int y)を使って表示する

PopupWindow#showAtLocation(View parent,int gravity, int x, int y)は画面の任意の位置にPopupWindowを表示することができます。
int gravityはPopupWindowの表示位置をGravityを使って設定することができます。
int xはPopupWindowをx軸方向に移動させます。正の値で右方向、負の値で左方向に移動します。
int yはPopupWindowをy軸方向に移動させます。正の値で下方向、負の値で上方向に移動します。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // showAtLocation (View parent,int gravity, int x, int y)
    Button showPopupWindow4 = new Button(this);
    showPopupWindow4.setText("showAtLocation (View parent,int gravity, int x, int y)を使って表示する");
    showPopupWindow4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.showAtLocation(v,Gravity.CENTER,-100,-100);
        }
    });

    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(showPopupWindow4);
    linearLayout.addView(dismissPopupWindow);

    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(linearLayout);
    setContentView(frameLayout);


PopupWindow#isShowingを使って表示状態を確認する

PopupWindow#isShowingはPopupWindowが表示されているかどうかを返却します。
PopupWindowが表示されている場合はtrueを、表示されていない場合はfalseを返却します。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // showAsDropDown (View anchor)
    Button showPopupWindow1 = new Button(this);
    showPopupWindow1.setText("showAsDropDown (View anchor)を使って表示する");
    showPopupWindow1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.showAsDropDown(v);
        }
    });

    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    // PopupWindowの表示状態を確認するボタンを作成
    Button isShowingPopupWindow = new Button(this);
    isShowingPopupWindow.setText("PopupWindowの表示状態を確認する");
    isShowingPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(PopupWindowActivity.this, popupWindow.isShowing() ? "表示されています。" : "表示されていません", Toast.LENGTH_SHORT).show();
        }
    });

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(showPopupWindow1);
    linearLayout.addView(dismissPopupWindow);
    linearLayout.addView(isShowingPopupWindow);

    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(linearLayout);
    setContentView(frameLayout);


PopupWindow#isAboveAnchorを使って表示位置を確認する

PopupWindow#isAboveAnchorはPopupWindowが指定したViewの上に表示されているかどうかを返却します。
PopupWindowがViewの上に表示されている場合はtrueを、下に表示されていない場合はfalseを返却します。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.LTGRAY);

    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を800に設定
    popupWindow.setWidth(800);
    // PopupWindowの高さを800に設定
    popupWindow.setHeight(800);

    // PopupWindowを消すボタンを作成
    Button dismissPopupWindow = new Button(this);
    dismissPopupWindow.setText("PopupWindowを消す");
    dismissPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindow#dismissでPopupWindowを消す
            popupWindow.dismiss();
        }
    });

    // PopupWindowの表示状態を確認するボタンを作成
    Button isAboveAnchorPopupWindow = new Button(this);
    isAboveAnchorPopupWindow.setText("PopupWindowの表示が上か下かを確認する");
    isAboveAnchorPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(PopupWindowActivity2.this, popupWindow.isAboveAnchor() ? "上に表示されています。" : "下に表示されています。", Toast.LENGTH_SHORT).show();
        }
    });
    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.addView(dismissPopupWindow);
    linearLayout.addView(isAboveAnchorPopupWindow);

    for (int i = 1; i < 20; i++) {
        // showAsDropDown (View anchor)
        Button showPopupWindow = new Button(this);
        showPopupWindow.setText("表示ボタン : " + i);
        showPopupWindow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.showAsDropDown(v);
            }
        });
        linearLayout.addView(showPopupWindow);
    }

    ScrollView scrollView = new ScrollView(this);
    scrollView.addView(linearLayout);
    FrameLayout frameLayout = new FrameLayout(this);
    frameLayout.addView(scrollView);
    setContentView(frameLayout);