【AndroidのViewを制する】 表示中のPopupWindowを更新する

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

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

PopupWindow#update()を使って設定を更新する

PopupWindowが表示されている状態で設定を変更するメソッドを使用してもPopupWindowには影響がありません。
PopupWindow#update()は最新の設定をPopupWindowに適用するメソッドです。
  • setClippingEnabled(boolean)
  • setFocusable(boolean)
  • setIgnoreCheekPress()
  • setInputMethodMode(int)
  • setTouchable(boolean)
  • setAnimationStyle(int)


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowをクリックするとトーストが表示されるように設定
    contentView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(PopupWindowActivity3.this, "contentViewがクリックされました", Toast.LENGTH_SHORT).show();
        }
    });
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);
    // PopupWindowがタッチできるように設定
    popupWindow.setTouchable(true);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            // PopupWindowがタッチできるように設定
            popupWindow.setTouchable(true);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update()
    Button updatePopupWindow1 = new Button(this);
    updatePopupWindow1.setText("update()を使って設定を変更する");
    updatePopupWindow1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowがタッチできないように設定
            popupWindow.setTouchable(false);
            // 変更したPopupWindowの設定を反映する
            popupWindow.update();
        }
    });
    // 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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow1);

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


PopupWindow#update(int width, int height)を使って幅と高さを更新する

PopupWindow#update(int width, int height)は最新の設定をPopupWindowに適用するメソッドです。
int widthは幅を設定します。負の値を設定すると無視されます、高さだけを設定したい場合は-1を設定してください。
int heightは高さを設定します。負の値を設定すると無視されます、幅だけを設定したい場合は-1を設定してください。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update(int width, int height)
    Button updatePopupWindow2 = new Button(this);
    updatePopupWindow2.setText("update(int width, int height)を使って表示を変更する");
    updatePopupWindow2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.update(600,600);
        }
    });
    // 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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow2);

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


PopupWindow#update(View anchor, int width, int height)を使ってアンカーを更新する

PopupWindow#update(View anchor, int width, int height)はPopupWindowの表示位置を任意Viewの近くに更新するメソッドです。
View anchorはPopupWindowを表示するViewを設定します。
int widthは幅を設定します。負の値を設定すると無視されます、幅をを変更したくない場合は-1を設定してください。
int heightは高さを設定します。負の値を設定すると無視されます、高さを変更したくない場合は-1を設定してください。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update(View anchor, int width, int height)
    Button updatePopupWindow3 = new Button(this);
    updatePopupWindow3.setText("update(View anchor, int width, int height)を使って表示を変更する");
    updatePopupWindow3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.update(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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow3);

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


PopupWindow#update(View anchor, int xoff, int yoff, int width, int height)を使ってアンカーを更新する

PopupWindow#update(View anchor, int xoff, int yoff, int width, int height)はPopupWindowの表示位置を任意Viewの近くに更新するメソッドです。
View anchorはPopupWindowを表示するViewを設定します。
int xoffはPopupWindowの左端とアンカーViewの左端の距離を設定します。
int yoffはPopupWindowの上端とアンカーViewの下端の距離を設定します。
int widthは幅を設定します。負の値を設定すると無視されます、幅を変更したくない場合は-1を設定してください。
int heightは高さを設定します。負の値を設定すると無視されます、高さを変更したくない場合は-1を設定してください。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update(View anchor, int xoff, int yoff, int width, int height)
    Button updatePopupWindow4 = new Button(this);
    updatePopupWindow4.setText("update(View anchor, int xoff, int yoff, int width, int height)を使って表示をする");
    updatePopupWindow4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.update(v,100,-400,200,200);
        }
    });
    // 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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow4);

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


PopupWindow#update(int x, int y, int width, int height)を使って表示位置を更新する

PopupWindow#update(int x, int y, int width, int height)はPopupWindowの表示位置を画面上の任意の位置にを更新するメソッドです。
int xはPopupWindowの左端と画面の左端の距離を設定します。
int yはPopupWindowの上端と画面の上端の距離を設定します。
int widthは幅を設定します。負の値を設定すると無視されます、幅を変更したくない場合は-1を設定してください。
int heightは高さを設定します。負の値を設定すると無視されます、高さを変更したくない場合は-1を設定してください。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update(int x, int y, int width, int height)
    Button updatePopupWindow5 = new Button(this);
    updatePopupWindow5.setText("update(int x, int y, int width, int height)を使って表示を変更する");
    updatePopupWindow5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.update(200,200,200,200);
        }
    });
    // 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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow5);

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


PopupWindow#update(int x, int y, int width, int height, boolean force)を使って表示位置を更新する

PopupWindow#update(int x, int y, int width, int height, boolean force)はPopupWindowの表示位置を画面上の任意の位置にを更新するメソッドです。
int xはPopupWindowの左端と画面の左端の距離を設定します。
int yはPopupWindowの上端と画面の上端の距離を設定します。
int widthは幅を設定します。負の値を設定すると無視されます、幅を変更したくない場合は-1を設定してください。
int heightは高さを設定します。負の値を設定すると無視されます、高さを変更したくない場合は-1を設定してください。
boolean forceは位置x,yに対してPopupWindowのLayoutParamsが対応しているしている場合でも強制的に位置を変更する場合はtrue、 必要に応じて再配置する場合はfalseを設定します。


    // PopupWindow内に表示するFrameLayoutを作成する。
    FrameLayout contentView = new FrameLayout(this);
    contentView.setBackgroundColor(Color.RED);
    // PopupWindowのインスタンスを作成する
    final PopupWindow popupWindow = new PopupWindow();
    // PopupWindowのコンテンツにImageViewを設定する。
    popupWindow.setContentView(contentView);
    // PopupWindowの幅を500に設定
    popupWindow.setWidth(500);
    // PopupWindowの高さを500に設定
    popupWindow.setHeight(500);

    // showAsDropDown (View anchor)
    Button showPopupWindow = new Button(this);
    showPopupWindow.setText("PopupWindowを表示する");
    showPopupWindow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // PopupWindowの幅を500に設定
            popupWindow.setWidth(500);
            // PopupWindowの高さを500に設定
            popupWindow.setHeight(500);
            popupWindow.showAsDropDown(v,500,500);
        }
    });
    // update(int x, int y, int width, int height, boolean force)
    Button updatePopupWindow6 = new Button(this);
    updatePopupWindow6.setText("update(int x, int y, int width, int height, boolean force)を使って表示を変更する");
    updatePopupWindow6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.update(100,100,500,500,true);
        }
    });
    // 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(dismissPopupWindow);
    linearLayout.addView(showPopupWindow);
    linearLayout.addView(updatePopupWindow6);

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