【AndroidのViewを制する】 ListPopupWindowを使いこなしてポップアップを表示する
今回、紹介する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を表示する
- インスタンス化
- ListPopupWindow#setWidthとListPopupWindow#setHeightを使い、幅と高さを設定する
- ListPopupWindow#setHorizontalOffsetとListPopupWindow#setVerticalOffsetを使い、水平方向と垂直方向のオフセット位置を設定する
- ListPopupWindow#setAnchorViewを使用して表示位置を決める
- ListPopupWindow#showを使い表示する
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;
}
}