【AndroidのViewを制する】 ListPopupWindowを使いこなしてポップアップを表示する

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

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

ListPopupWindowを表示するためのメソッド

ListPopupWindowを表示するまでに使用するメソッドは下記の通です。

void setAnchorView(View anchor) ListPopupWindowを表示するときのアンカーViewを設定するメソッドです。
アンカーViewが設定されていない状態で表示すると例外が発生します。
View getAnchorView() 現在設定されているアンカーViewを取得するメソッドです。
void setHeight(int height) ListPopupWindowの高さを設定します。
ViewGroup.LayoutParams.WRAP_CONTENTやViewGroup.LayoutParams.MATCH_PARENTを設定することができます。
int getHeight() ListPopupWindowの高さを取得します。
void setWidth(int width) ListPopupWindowの高さを取得します。
ViewGroup.LayoutParams.WRAP_CONTENTやViewGroup.LayoutParams.MATCH_PARENTを設定することができます。
int getWidth() ListPopupWindowの幅を取得します。
void setVerticalOffset(int offset) 表示位置を垂直方向に移動させる値(ピクセル)を設定します。
offsetが正の値の場合は下方向に、負の値の場合は上方向に移動します。
int getVerticalOffset() 表示位置を垂直方向に移動させる値(ピクセル)を取得します。
void setHorizontalOffset(int offset) 表示位置を水平方向に移動させる値(ピクセル)を設定します。
offsetが正の値の場合は右方向に、負の値の場合は左方向に移動します。
int getHorizontalOffset() 表示位置を水平方向に移動させる値(ピクセル)を取得します。
void show() ポップアップを表示する、既に表示されている場合はサイズと位置を再計算します。
void postShow() UIスレッド上でポップアップを表示します、既に表示されている場合はサイズと位置を再計算します。
void dismiss() ポップアップの表示を終了します。
boolean isShowing() ポップアップの表示状態を返却します。

ListPopupWindowを表示する

  1. インスタンス化
  2. ListPopupWindow#setWidthとListPopupWindow#setHeightを使い、幅と高さを設定する
  3. ListPopupWindow#setHorizontalOffsetとListPopupWindow#setVerticalOffsetを使い、水平方向と垂直方向のオフセット位置を設定する
  4. ListPopupWindow#setAnchorViewを使用して表示位置を決める
  5. ListPopupWindow#showを使い表示する
ListPopupWindowをインスタンスを作成します。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frameLayout = new FrameLayout(this);
        final Button button = new Button(this);
        button.setText("表示");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ListPopupWindow listPopupWindow = createListPopupWindow(button);
                listPopupWindow.show();
            }
        });
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.gravity = Gravity.CENTER;
        frameLayout.addView(button , layoutParams);
        setContentView(frameLayout);
    }

    private ListPopupWindow createListPopupWindow(Button button) {
        ListPopupWindow listPopupWindow = new ListPopupWindow(this);
        // アンカーViewの設定
        listPopupWindow.setAnchorView(button);
        // 幅の設定
        listPopupWindow.setWidth(500);
        // 高さの設定
        listPopupWindow.setHeight(500);
        // 垂直下方向に表示位置を200ピクセル移動させる。
        listPopupWindow.setVerticalOffset(200);
        // 水平右方向に表示位置を200ピクセル移動させる。
        listPopupWindow.setHorizontalOffset(200);
        return listPopupWindow;
    }
}